2015-10-20 79 views
3

我知道只有對象可以引用。但文字不是客體。 所以,我可以理解爲什麼下面的代碼無法編譯:爲什麼在引用文字時必須使用const引用

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

然而,當我在他們的前面加常量,它可以工作!

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

我不知道爲什麼。任何人都可以幫我嗎?

回答

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 
0

(Assiming您在第二片斷漏掉「&」。)

因爲字面不是一個對象;創建一個臨時對象,它具有與文字對應的值。

您可以將一個臨時對象綁定到一個const引用,從而擴展該對象的生存期,但不能將其綁定到非const引用。

+0

是什麼_object的lifetime_這裏的意思嗎?爲什麼我需要延長它? – sydridgm

相關問題