为什么对象成员值在 2 getter 次调用之间发生变化
Why is object member value changing between 2 getter calls
我在第二个 getter 调用中得到了意想不到的值,这在我看来是错误的,发生这种情况的任何具体原因?
#include<iostream>
using namespace std;
class Test {
public:
int &t;
Test (int x):t(x) { }
int getT() { return t; }
};
int main() {
int x = 20;
Test t1(x);
cout << t1.getT() << " ";
cout << t1.getT() << endl;
return 0;
}
这里的问题是您的代码导致了未定义的行为。
Test
的构造函数没有引用 int 而是一个副本,并且由于 int x
只是一个临时副本,不能保证在你的第二个函数调用你之前存在将以未定义的行为结束。
您必须将构造函数更改为以下内容才能使代码正常工作:
Test(int& x) : t(x) {}
现在您在 Test
中使用的引用将与 x
中定义的相同 main
我在第二个 getter 调用中得到了意想不到的值,这在我看来是错误的,发生这种情况的任何具体原因?
#include<iostream>
using namespace std;
class Test {
public:
int &t;
Test (int x):t(x) { }
int getT() { return t; }
};
int main() {
int x = 20;
Test t1(x);
cout << t1.getT() << " ";
cout << t1.getT() << endl;
return 0;
}
这里的问题是您的代码导致了未定义的行为。
Test
的构造函数没有引用 int 而是一个副本,并且由于 int x
只是一个临时副本,不能保证在你的第二个函数调用你之前存在将以未定义的行为结束。
您必须将构造函数更改为以下内容才能使代码正常工作:
Test(int& x) : t(x) {}
现在您在 Test
中使用的引用将与 x
中定义的相同 main