Предоставляет ли стандарт С++ добавление двух целых чисел (фундаментальный тип int), чтобы выбросить исключение С++? - программирование
Подтвердить что ты не робот

Предоставляет ли стандарт С++ добавление двух целых чисел (фундаментальный тип int), чтобы выбросить исключение С++?

Разрешает ли Стандарт?

Я не думаю, что это так. Кто-то делает. Мне нужны умные люди, чтобы доказать, что он не прав.

4b9b3361

Ответ 1

Да, да. Переполнение значащих целых чисел - это поведение undefined, поэтому может случиться что угодно (включая исключение).

В качестве побочного примечания, я должен сказать, что это вряд ли произойдет (хотя и определенно возможно) для большинства реализаций; как стандарт С++ 11 упоминает в примечании к пункту 5/4:

Если во время оценки выражения результат не определяется математически или нет в диапазоне представляемые значения для его типа, поведение undefined. [ Примечание: большинство существующих реализаций С++ игнорировать целые переполнения. Обработка деления на ноль, формирование остатка с использованием делителя нуля и все исключения с плавающей запятой различаются между машинами и обычно регулируются библиотечной функцией. -end note]

Однако, как упоминает hvd в комментариях, некоторые реализации позволяют предоставлять настраиваемые обработчики для переполнения целого числа, и эти обработчики могут бросать.

Ответ 2

Эмпирическое правило - это то, что может быть написано на C, не может и не должно генерировать исключение...

Следовательно, это не так.

Как говорит Энди, это поведение undefined, поэтому все может случиться. Теоретически компьютер также мог бы сделать вам чашку кофе и отвезти собаку на прогулку. Однако, если бы вы были на собеседовании, я бы предложил вам сказать им: "