为什么对象成员值在 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