Простая задачка на Си++
2020-08-02 04:29Сложить два целых числа, вернуть целое. Породить исключение в случае арифметического переполнения.
Удивительно, сколько народу обламывается на этой задачке.int add(int a, int b);

no subject
Date: 2020-08-02 23:10 (UTC)Нет. Компилятор смотрит на вещи так, как-будто UB не происходит. Т.е., например, он видит выражение "a + 1 > a" как 1, если a - signed int. И если такое выражение влияет на логику оптимизатора (потому, например, что оно является условием if или тернарного условия), то какой-то код может быть и выкинут. Но могут быть и более тонкие последствия. Например, из-за того, что то выражение равно 1, компилятор может счесть, что диапазон значений какого-то другого выражения (или переменной) может быть ограничен интересным образом, что в свою очередь может иные оптимизации разрешить.
no subject
Date: 2020-08-03 08:08 (UTC)no subject
Date: 2020-08-03 15:50 (UTC)В стандарт просто не внесли зависание как побочный эффект (вероятно, забыли, хотя зуб не даю, т.к. очевидно, бесконечные циклы в ходу издревле). Ну и вот, бесконечный цикл пал жертвой оптимизации в какой-то момент.