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