Const引用不是"更新"

时间:2015-09-06 20:51:51

标签: c++ reference const

我知道这可能是一个常见的问题,我之前已经看过类似的问题了。我试图绕过那个"返回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一样。到底发生了什么?

2 个答案:

答案 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;如果您想要更新它。现在它被复制了。