考慮下面的代碼C++:如何初始化一個類的引用成員變量?
#include<iostream>
using namespace std;
class Test {
int &t;
public:
Test (int &x) { t = x; }
int getT() { return t; }
};
int main()
{
int x = 20;
Test t1(x);
cout << t1.getT() << " ";
x = 30;
cout << t1.getT() << endl;
return 0;
}
是表示在使用gcc編譯
est.cpp: In constructor ‘Test::Test(int&)’:
est.cpp:8:5: error: uninitialized reference member ‘Test::t’ [-fpermissive]
爲什麼不直接編譯調用構造函數下面的錯誤?
雖然答案解釋瞭如何解決這個問題,但我想指出的一個根本問題是,在進入構造函數的正文之前實際發生了初始化,以確保所有成員在使用之前處於有效狀態。由於引用**必須被初始化,並且在初始化之後不能被「重定向」,所以在輸入構造函數的主體之前,它們在邏輯上需要指向實際變量。 – 2017-06-08 23:28:14