我试图通过引用存储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();
}
输出结果为:
A's ctor x = 8
x = 8
x = 8
为什么x不是9?
答案 0 :(得分:5)
问题是您将临时(构造函数参数y
)绑定到引用。临时的生命周期仅限于构造函数,但您的参考仍然存在,成为一个&#34;悬空&#34;参考。这是合理的编译器对此事所说的:
crap13.cpp:10:18:警告:绑定参考成员&#39; x&#39;堆叠分配的参数&#39; y&#39; [-Wdangling场]
A(int y):x(y)
你可以修复&#34;这可以通过使构造函数参数成为引用:
A(int& y) : x(y)
但是你必须确保作为参数传递给构造函数的任何东西都比正在构造的对象更长。
答案 1 :(得分:0)
问题是你在构造函数中按值传递int,你应该通过引用传递它:
A(int& y) : x(y)
{
cout << "A's ctor x = " << x << endl;
}