为什么在引用文字时必须使用const引用

时间:2015-10-20 17:22:47

标签: c++ reference const literals

我知道只有对象可以参考。但文字不是对象。 所以我能理解为什么以下代码无法编译:

int &a = '4';
int &b = 2;

然而,当我在他们面前添加 const 时,它可以工作!!

const int &a = '4';
const int &b = 2;

我不知道为什么。有谁可以帮助我?

2 个答案:

答案 0 :(得分:7)

整数或字符文字是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

答案 1 :(得分:0)

(假设您在第二个片段中遗漏了'&'。)

因为文字不是对象;创建一个临时对象,其值与文字对应。

您可以将临时绑定到const引用,从而扩展该对象的生命周期,但不能将其绑定到非const引用。