2013-02-14 2 views
-6

я использую VS2010 компилятор и я сталкиваюсь неоднозначностьюC++ синтаксис неоднозначность в простом коде

что делает код ниже средств? какой результат и почему?

int a; 
    cout<<(a=2)+(a=3)+(a=5) 

им очень жаль, если вопрос задан раньше или если это очевидно! но я confiused результата

output :15 

Я не мог найти мой ответ здесь:

Why are these constructs (using ++) undefined behavior?

быть терпеливыми и посмотреть на результат снова (пожалуйста)

Thanx заранее

+4

Вы - тот, у кого есть компилятор. Вы говорите нам. – meagar

+1

Контекст вокруг этого вопроса может сделать его значимым. Как есть, H2CO3 имеет правильный ответ :) – SirPentor

+0

Какая двусмысленность? –

ответ

3

Что означает этот код?

Ничего разумного.

какой выходной сигнал?

Непредсказуемый.

и почему?

Поскольку этот код вызывает неопределенное поведение.

1

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

+0

мог бы объяснить, в каком порядке появляется результат 15? – mefmef

+0

@mefmef Код вызывает * неопределенное поведение. * Это означает, что * что-либо может случиться (он может открыть ваш медиаплеер и сыграть что-нибудь, если он действительно захочет). Вероятно, компилятор выдал инструкции, которые не переводится точно в код. Поскольку код недействителен, для него совершенно законно это делать. – Angew

+0

@mefmef - Заказ отсутствует. Вы пытаетесь изменить значение 'a' несколько раз в одном выражении. Это недопустимо и приводит к неопределенному поведению. ** Любой ** возможен результат, включая сбой системы (или вывод 15 или что-то еще). –