为什么在引用文字时必须使用 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
我知道只有对象可以有引用。但是文字不是对象。 所以我可以理解为什么以下代码无法编译:
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