Каков правильный ответ для cout << a++ << a;?

Недавно в интервью был следующий вопрос объективного типа.

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'.

98
задан R Sahu 24 October 2017 в 15:24
поделиться