为什么在引用文字时必须使用const引用
问题描述:
我知道只有对象可以引用。但文字不是客体。 所以,我可以理解为什么下面的代码无法编译:为什么在引用文字时必须使用const引用
int &a = '4';
int &b = 2;
然而,当我在他们的前面加常量,它可以工作!
const int &a = '4';
const int &b = 2;
我不知道为什么。任何人都可以帮我吗?
答
甲整数或字符文字是prvalue [expr.prim.general]
文本是一个基本表达式。它的类型取决于它的形式(2.13)。一个字符串文字是一个左值;所有其他文字都是prvalues。
由于这是一个prvalue我们被允许采取const &
它,但我们不能引用它。如果我们将const &
设置为暂时的,则临时的生命周期将延长至参考超出范围的点。
{
const int & a = 42;
//line of code
//42 still exits here
} // a goes out of scope and now 42 is gone
答
(Assiming您在第二片断漏掉“&”。)
因为字面不是一个对象;创建一个临时对象,它具有与文字对应的值。
您可以将一个临时对象绑定到一个const引用,从而扩展该对象的生存期,但不能将其绑定到非const引用。
是什么_object的lifetime_这里的意思吗?为什么我需要延长它? – sydridgm