Недавно в интервью был задан следующий объективный вопрос.
int a = 0;
cout << a++ << a;
Ответы:
а. 10
б. 01
с. undefined поведение
Я ответил на выбор b, т.е. выход был бы "01".
Но, к моему удивлению, позже мне сказал интервьюер, что правильным ответом является вариант c: undefined.
Теперь я знаю понятие точек последовательности в С++. Поведение undefined для следующего утверждения:
int i = 0;
i += i++ + i++;
но согласно моему пониманию для выражения cout << a++ << a
, ostream.operator<<()
будет вызываться дважды, сначала с ostream.operator<<(a++)
и позже ostream.operator<<(a)
.
Я также проверил результат на компиляторе VS2010, и его вывод также "01".