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