Const ссылка не "обновлена"

Я знаю, что это может быть распространенным вопросом, и я видел подобные вопросы, которые задавались на SO раньше. Я пытаюсь обернуть голову вокруг этого "возврата по постоянным ссылкам". Кажется, я застрял в этом, казалось бы, простом примере:

#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& не позволяет мне установить tx, используя что-то вроде y=1это нормально. Тем не менее, я ожидал бы, что y будет 1 в последней строке, но он останется равным нулю, точно так же, как если бы getX() возвратил простое int. Что именно здесь происходит?

2 ответа

Решение

Возвращаясь по ссылке, вы сохраняете результат в новом целом числе. 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
}

Вы присваиваете возвращаемую ссылку const на переменную int, в то время как вы должны назначить ее для const int & y, если вы хотите, чтобы она была обновлена. Прямо сейчас это скопировано.

Другие вопросы по тегам