2012-08-10 477 views
1

可能重複:
How come a non-const reference cannot bind to a temporary object?爲什麼const有意義?

這個程序:

int fun() 
{ 
    return 1; 
} 

int main() 
{ 
    const int& var = fun(); 

    return 0; 
} 

我的問題是,爲什麼我必須把一個const以前生產的VAR定義是什麼?如果不是的話,g ++會給我一個錯誤,就像「int'類型爲'int'的非const引用的無效初始化'。 'const'是什麼?

+1

閱讀這篇文章:http://herbsutter.com/2008/01/01/gotw-88-a-candidate-for -the-最重要的const的/。 – mfontanini 2012-08-10 02:04:44

+0

好吧,你已經抑制了錯誤信息,但你的代碼打算做什麼?在你賦值的代碼中賦值後,你不能訪問'var',因爲它是對臨時對象的引用。 – 2012-08-10 02:05:07

+0

最簡單的答案:否則你可能會改變你的函數輸出,這當然是隨機的。 如果您有可以更改的內容,則可以將其設置爲非常量引用。 這是一個簡單直觀的(和正確的)規則如何使用「const」。 – klm123 2012-08-10 02:11:23

回答

3

在這種情況下,您需要const,因爲參考初始化需要帶有地址的變量,而不僅僅是一個值。因此,編譯器必須創建一個匿名變量,除了通過引用之外,它們不能訪問;編譯器不希望你訪問你沒有聲明的變量。

如果你想明確地聲明變量,const是不必要的:

int tmp = fun(); 
int &var(tmp);