为什么在引用文字时必须使用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引用。

+0

是什么_object的lifetime_这里的意思吗?为什么我需要延长它? – sydridgm