Возврат ссылки из функции и ее изменение - PullRequest
3 голосов
/ 07 августа 2010
#include<iostream>
int& f(){
 static int x = 0;
 x++;
 return x;
}

int main(){

  f() += 1; //A

 f() = f() + 1; //B
 std::cout << f();
}

Приведенный выше код выводит 6 на gcc и 5 на MSVC. Теперь, когда я изменяю A и B на f()=f(), я получаю 5 на обоих компиляторах. Что здесь такого? Поведение не определено. Если да, то почему?

1 Ответ

5 голосов
/ 07 августа 2010

Не определено, потому что в этом коде:

f() = f() + 1;

Не определено, какой вызов функции f () происходит первым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...