c++ - 对由文字实例化的对象的类引用
问题描述
这里发生了什么?
struct A {
A (int){std::cout<<'A';}
};
const A& a = 3;
我的假设是由于文字3
是rvalue,因此应用了临时实现转换。通过调用构造函数创建一个临时对象,从而打印A
并将引用绑定到结果对象。
解决方案
你是对的。是对 const 限定的类类型a
的左值引用[dcl.ref]/2 ,初始化表达式是非类类型[lex.icon]/23
的纯右值[expr.prim.literal]/1 ,既不是引用- 与[dcl.init.ref]/4相关或参考兼容。因此,[dcl.init.ref]/5.4.1似乎适用。有一个转换构造函数[class.conv.ctor]/1,它将用于转换为类型的纯右值,然后用于初始化引用。这一次,初始化表达式现在是类型的纯右值,它是与 相关的引用。因此,[dcl.init.ref]/5.3int
const A
3
const A
const A
const A
应该应用,这将执行临时实现[conv.rval]。在进程中创建的临时对象的生命周期将被延长[class.temporary]/6,因为它被绑定到a
位于全局命名空间范围内的引用......