2013-05-27 43 views
3
#include<iostream> 
using namespace std; 

int fun(int &x) 
{ 
    return x; 
} 
int main() 
{ 
    cout << fun(10); 
    return 0; 
} 

任何人都可以解釋錯誤的原因嗎?類型'int'的非const引用從'int'類型的臨時變量無效初始化

感謝

+0

您正在傳遞常量'10', –

+0

code_hacker:引用引用變量,以便函數中的變量變化可以反映在調用函數中,但常量不能被修改,這就是爲什麼不能引用常量對象(和這是編譯時間錯誤)。 –

回答

10

10是恆定的,所以你不能引用傳遞給它,只是因爲改變一個恆定的整個概念是奇怪。

引入引用是爲了解決C(以及更早的C++)中的一個棘手問題,即所有東西都是按值傳遞的事實,如果想要將更改反映回調用方,則必須傳入一個指針並取消引用該函數內的指針以獲取實際變量(用於讀取和寫入該變量)。

這是認真好的東西在下一個ISO C標準。雖然有使用指針可以給我們一些關於堆棧溢出了很多代表的,它不是做世界的C程序員多好:-)

解決你的問題很簡單。如果您需要改變功能的項目,只是通過它正常:

int fun (int x) { ... } 

如果需要去改變它,好,那你必須通過一些可以進行更改:

int xyzzy = 10; 
cout << fun (xyzzy); 
1

的引用(&)必須指向(參考)給一個變量。一個常量不能被引用。

5

我們可以縮短這個程序到以下幾點:

int& x = 10; 

這個代碼不工作的原因是因爲10是一個右值,而右值不能結合左值引用。如果那是真的,我們可以改變文字的值(這在其他語言中是可能的,但在C++中是不可能的)。

相關問題