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

why must use const reference when reference to literals

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

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

但是,当我在它们前面添加const时,它可以工作!!

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

不知道为什么。谁能帮帮我?

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

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

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

整数或字符文字是纯右值 [expr.prim.general]

A literal is a primary expression. Its type depends on its form (2.13). A string literal is an lvalue; all other literals are prvalues.

因为它是一个纯右值,所以我们可以对它取一个 const & 但我们不能引用它。如果我们对临时文件使用 const &,临时文件的生命周期将延长到引用超出范围的程度。

{
    const int & a = 42;
    //line of code
    //42 still exits here
} // a goes out of scope and now 42 is gone