Путаница с Cout в c ++

Поскольку в функции cout печать начинается слева направо, почему эти типы команд печатаются по-разному? пожалуйста, объясните мне. Насколько мне известно, результат следующей программы должен быть 113, но это 322. Как?

#include<iostream.h>
void main()
{
int i=1;
cout<<i<<i++<<++i;
}

Вывод:

322

Заранее спасибо.


person Vishnu Vardhan    schedule 28.10.2014    source источник
comment
Возможно, это поможет stackoverflow.com/questions/ 3986361 /   -  person Victor Sand    schedule 28.10.2014
comment
Похоже на проблему с точками последовательности, см. это тоже.   -  person Niall    schedule 28.10.2014
comment
Этот код вызывает неопределенное поведение. См. Неопределенное поведение и точки последовательности.   -  person metacubed    schedule 28.10.2014
comment
Ненавижу, когда кто-то говорит, что Не определено :(   -  person nobalG    schedule 28.10.2014
comment
Посмотрите на это: stackoverflow.com/questions/ 665112 / how-the-buffer-of-cout-work   -  person Abhishek Chandel    schedule 28.10.2014
comment
Если вы используете x++ или ++x в операторе, не используйте x в другом месте оператора.   -  person Neil Kirk    schedule 28.10.2014


Ответы (1)


Кажется, вы предполагаете, что приращения происходят слева направо, но согласно Стандарту порядок оценки подвыражений не указан. Дополнительные сведения см. здесь.

В этом случае похоже, что компилятор выбрал оценку справа налево:

  • ++i происходит, поэтому i == 2 и 2 - значение выражения;
  • i++ происходит, i увеличивается до 3, но вычисляется его старое значение, 2;
  • i теперь оценивается как 3.
person Thomas    schedule 28.10.2014