Возврат ссылки на элемент данных класса и затем попытка изменить этот член - PullRequest
5 голосов
/ 13 мая 2019

Я видел другие посты по этому вопросу, но на самом деле еще не понял, что происходит.

, скажем, у меня есть этот код:

template<typename T>struct S {
    S(T value):val{value}{}
    T& get(){return val;}
private:
    T val;
};
int main(){
S<int>s1{5};
int n = s1.get();
n = 10;
std::cout<<s1.get();
}

это печатает: 5

мой вопрос: почему, если я вернул ссылку на val, значение val не изменится, когда я изменил значение n?

Ответы [ 2 ]

5 голосов
/ 13 мая 2019

Если вы сделаете

int& n = s1.get();
n = 10;
std::cout << s1.get();

Вы увидите 10.

5 голосов
/ 13 мая 2019

Когда вы сохраняете результат в int n, вы создаете копию. Попробуйте:

int &n = s1.get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...