MiddleКодИногдаЕщё не отвечали
Что выведет std::cout << i++ << i++ << i++?
Предскажите вывод для разных стандартов C++.
int i = 0;
std::cout << i++ << " " << i++ << " " << i++;
Определите вывод и объясните.
До C++14 включительно порядок вычисления операндов << был неуточнённым, поэтому могло печататься 2 1 0 или 0 1 2. C++17 сделал операнды << вычисляемыми слева направо, поэтому теперь надёжно печатается 0 1 2. Порядок аргументов функций всё ещё неуточнён — избегайте таких побочных эффектов.
- ✗Считать, что цепочка
<<всегда вычислялась слева направо до C++17 - ✗Называть это неопределённым поведением — оно неуточнённое, ведь каждый
i++упорядочен в рамках отдельного вызова<< - ✗Обобщать исправление C++17 на все аргументы функций
- →В чём здесь разница между неуточнённым порядком вычисления и неопределённым поведением?
- →Применяется ли правило C++17 «слева направо» к обычным аргументам функций?