I.M*_*Mac 2 c++ reference pass-by-reference
我试图通过引用存储int作为类的数据成员.我期望通过引用对象获取int比如果我从外部增加引用它增加对象内部的值.
class A
{
private :
int& x;
public:
A(int y) : x(y)
{
cout << "A's ctor x = " << x << endl;
}
void print()
{
cout << "x = " << x << endl;
}
};
int main()
{
int i = 8;
A a(i);
a.print();
++i;
a.print();
}
Run Code Online (Sandbox Code Playgroud)
输出是:
A's ctor x = 8
x = 8
x = 8
Run Code Online (Sandbox Code Playgroud)
为什么x不是9?
问题是您将临时(构造函数参数y)绑定到引用.临时的生命周期仅限于构造函数,但您的引用依然存在,成为"悬空"引用.这是一个合理的编译器有关此事的说法:
crap13.cpp:10:18:警告:绑定引用成员'x'以堆叠已分配的参数'y'[-Wdangling-field]
A(int y):x(y)
您可以通过将构造函数参数作为引用来"修复"此问题:
A(int& y) : x(y)
Run Code Online (Sandbox Code Playgroud)
但是你必须确保作为参数传递给构造函数的任何内容都超过了正在构造的对象.