Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 引用文字时为什么必须使用常量引用_C++_Reference_Constants_Literals - Fatal编程技术网

C++ 引用文字时为什么必须使用常量引用

C++ 引用文字时为什么必须使用常量引用,c++,reference,constants,literals,C++,Reference,Constants,Literals,我知道只有object可以引用。但文字不是对象。 所以我可以理解为什么以下代码无法编译: int &a = '4'; int &b = 2; 但是,当我在它们前面添加const时,它可能会起作用 const int &a = '4'; const int &b = 2; 我不知道为什么。有人能帮我吗?(假设您在第二段中漏掉了“&”) 因为文字不是一个对象;将创建一个临时对象,其值与文字对应 可以将临时对象绑定到常量引用,从而延长该对象的生存期,但不能将其绑定到

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

int &a = '4';
int &b = 2;
但是,当我在它们前面添加const时,它可能会起作用

const int &a = '4';
const int &b = 2;
我不知道为什么。有人能帮我吗?

(假设您在第二段中漏掉了“&”)

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


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

整数或字符文字是prvalue[expr.prim.general]

文本是一个主要表达式。其类型取决于其形式(2.13)。字符串文字是左值;所有其他文字都是prvalues

由于它是一个prvalue,我们可以对它取一个
常量&
,但我们不能引用它。如果我们将
常量&
作为临时变量,则临时变量的生存期将延长到引用超出范围的点

{
    const int & a = 42;
    //line of code
    //42 still exits here
} // a goes out of scope and now 42 is gone
这里物体的平均寿命是多少?为什么我需要扩展它?