考虑下面的代码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