Member 12921311 Ответов: 2

Каков будет результат следующей задачи?


int main()


{
	int a,b;
	a=5;
	
	b=++a + a++;
	
	cout<<b;

	
	
	
}


Что я уже пробовал:

Цитата:
почему не приходит 12 вместо 13?

Richard MacCutchan

Это зависит от обстоятельств: результаты не гарантируются, так как авторы компилятора могут обрабатывать такие выражения по-разному. Итог: никогда не пишите таких выражений.

Member 12921311

хорошо, сэр, спасибо.

2 Ответов

Рейтинг:
0

OriginalGriff

Зависит. Это зависит от используемого компилятора, версии компилятора, в какую сторону дует ветер ...
Операторы pre-и post-increment определены для увеличения значения до или после использования значения , но ничто в спецификации C или C++ не говорит, когда это должно произойти. Это может быть до того, как строка будет выполнена вообще, это может быть после строки, если она закончена. Это может быть даже сразу же после того, как команда будет использована. Что еще хуже, порядок выполнения внутри выражения также не определен (за исключением конкретных случаев, связанных с операторами && и||) - компилятор записывает его свободно для работы справа налево, или слева направо, или сверху вниз, или снизу вверх, или ... вы поняли идею.
И оптимизация может изменить все это, поэтому ваш производственный скомпилированный код может работать не так, как ваш код разработки.

Так что не делайте таких вещей: результаты не гарантируются и на них нельзя положиться-просто потому, что вы мочь делай что-нибудь, это не значит, что ты должен!