Я всегда ожидал, что он работает так, как описано здесь: Что такое x после "x = x++"?
Но когда я попытался проверить это:
int x = 0;
x = x++;
printf("x = %d\n", x);
Результат не равен 0, как я ожидал, но 1. Мы протестировали его в VS2012 и g++ (версия 4.7).
Обратите внимание, что этот код печатает 0, как ожидалось:
int x = 0;
int y = x++;
printf("y = %d\n", y);
Обратите внимание, что вы связываете вопрос Java, но вы пишете в C++.
В C (и унаследовано в C++), x = x++;
не определено, поскольку вы изменяете x
дважды между двумя точками последовательности. Это означает, что код может делать буквально все, включая кражу денег с вашего банковского счета и наем хитов, чтобы убить вас, а компилятор - в правильном направлении.
Радуйтесь, что он только устанавливает x
в 1. :-)
int postinc(int& i) { int x = i; i = i + 1; return x; } i = postinc(i)
? Кстати: мой GCC возвращает 0 как для C, так и для C ++, и все, что я пробовал, -std=
.