#include<iostream>
using namespace std;
int fun(int &x)
{
return x;
}
int main()
{
cout << fun(10);
return 0;
}
任何人都可以解釋錯誤的原因嗎?類型'int'的非const引用從'int'類型的臨時變量無效初始化
感謝
#include<iostream>
using namespace std;
int fun(int &x)
{
return x;
}
int main()
{
cout << fun(10);
return 0;
}
任何人都可以解釋錯誤的原因嗎?類型'int'的非const引用從'int'類型的臨時變量無效初始化
感謝
10
是恆定的,所以你不能引用傳遞給它,只是因爲改變一個恆定的整個概念是奇怪。
引入引用是爲了解決C(以及更早的C++)中的一個棘手問題,即所有東西都是按值傳遞的事實,如果想要將更改反映回調用方,則必須傳入一個指針並取消引用該函數內的指針以獲取實際變量(用於讀取和寫入該變量)。
這是認真好的東西在下一個ISO C標準。雖然有使用指針可以給我們一些關於堆棧溢出了很多代表的,它不是做世界的C程序員多好:-)
解決你的問題很簡單。如果您不需要改變功能的項目,只是通過它正常:
int fun (int x) { ... }
如果做需要去改變它,好,那你必須通過一些可以進行更改:
int xyzzy = 10;
cout << fun (xyzzy);
的引用(&
)必須指向(參考)給一個變量。一個常量不能被引用。
10這裏是一個常數,你要創建一個非const引用它。在一些可變任一存儲器10等
int x = 10
然後將它傳遞到功能或使參考爲const。
const int &x
它是C++ 11那麼你也可以使用右值引用的概念,所以它不會給錯誤。
欲瞭解更多詳情,請參閱error: invalid initialization of non-const reference of type ‘int&’ from an rvalue of type ‘int’
我們可以縮短這個程序到以下幾點:
int& x = 10;
這個代碼不工作的原因是因爲10是一個右值,而右值不能結合左值引用。如果那是真的,我們可以改變文字的值(這在其他語言中是可能的,但在C++中是不可能的)。
您正在傳遞常量'10', –
code_hacker:引用引用變量,以便函數中的變量變化可以反映在調用函數中,但常量不能被修改,這就是爲什麼不能引用常量對象(和這是編譯時間錯誤)。 –