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, если вы хотите, чтобы она была обновлена. Прямо сейчас это скопировано.