#include <iostream>
int main()
{
int a = 0;
std::cout << a++ << ' ' << ++a << ' ' << a++ << '\n';
}
Этот код дает мне этот выход 2 3 0
при компиляции C++ 11 на ideone.поведение компилятора при оценке подвыражения
Как известно, here Я знаю, что изменение значения переменной более одного раза без промежуточной точки последовательности приведет к неопределенному поведению, но поскольку C++ не оценивает выражения слева направо, а компьютеры не ведут себя случайным образом, Я хотел бы знать, как компилятор решает, какое подвыражение выбрать первый, второй и третий в приведенном выше примере.
Редактировать: Я использую Microsoft Visual Studio 2013, и вопрос был задан студентом, и я не мог объяснить, почему мы получаем эти случайные результаты.
Какой компилятор? Какая версия? Какие параметры этого компилятора? Undefined не определено. – laune
@rici Я не думаю, что это дубликат, потому что упомянутый вами вопрос говорит только о том, что мы получаем неопределенное поведение, но не объясняем почему. – Gaith
@Gaith: Это неопределенное поведение, потому что стандарт говорит, что это неопределенное поведение. Другого возможного объяснения нет. – rici