c++类内可以定义引用成员变量,但要遵循以下三个规则:
1、不能用默认构造函数初始化,必须提供构造函数来初始化引用成员变量。否则会造成引用未初始化错误。
2、构造函数的形参也必须是引用类型
3、不能在构造函数里初始化,必须在初始化列表中进行初始化。
构造函数分为初始化和计算两个阶段,前者对应成员初始化链表,后者对应构造函数函数体。引用必须在初始化阶段,也即在成员初始化链表中完成,否则编译时会报错(引用未初始化)。
示例:
#include <iostream>
using namespace std;
class A
{
public:
A(int &target) :a(target)
{
cout << "构造函数" << endl;
}
void printA()
{
cout << "a is:" << a << endl;
}
private:
int &a;
};
int main()
{
int a = 20;
A r(a);//依旧使用自定义的构造函数
r.printA();
int &b = a;
A r1(b);
r1.printA();
system("pause");
return 0;
}
结果为: