我知道只有對象可以引用。但文字不是客體。 所以,我可以理解爲什麼下面的代碼無法編譯:爲什麼在引用文字時必須使用const引用
int &a = '4';
int &b = 2;
然而,當我在他們的前面加常量,它可以工作!
const int &a = '4';
const int &b = 2;
我不知道爲什麼。任何人都可以幫我嗎?
我知道只有對象可以引用。但文字不是客體。 所以,我可以理解爲什麼下面的代碼無法編譯:爲什麼在引用文字時必須使用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引用。
是什麼_object的lifetime_這裏的意思嗎?爲什麼我需要延長它? – sydridgm