我知道这可能是一个常见的问题,我之前已经看过类似的问题了。我试图绕过那个"返回const引用"东西。我似乎陷入了这个看似简单的例子:
#include <iostream>
using namespace std;
class Test {
public:
int x;
Test(): x(0) {};
const int& getX() const {
return x;
}
};
int main() {
Test t;
int y = t.getX();
cout << y << endl;
t.x = 1;
cout << y << endl; // why not 1?
}
我明白通过const int&amp;返回阻止我使用类似y=1
的东西设置t.x,这很好。但是,我希望y在最后一行中为1,但它保持为零,就像getX()返回一个普通的int一样。到底发生了什么?
答案 0 :(得分:8)
当您通过引用返回时,您可以保护 new 整数y
中的结果,该结果与该成员x
无关。它只是t.x
的副本,它在初始化点之后的值不会以任何方式依赖于t.x
的值或存在状态。
使用引用来观察您想要的行为:
#include <iostream>
using namespace std;
class Test {
public:
int x;
Test(): x(0) {};
const int& getX() const {
return x;
}
};
int main() {
Test t;
const int &y = t.getX();
cout << y << endl;
t.x = 1;
cout << y << endl; // Will now print 1
}
答案 1 :(得分:3)
将返回的const引用分配给int变量,同时应将其赋值给const int&amp;如果您想要更新它。现在它被复制了。