#c #exception
#c #исключение
Вопрос:
Я понимаю, что написание кода, защищенного от исключений, в основном означает учет того, какая часть кода может выдавать исключение, чтобы вы могли предложить некоторую гарантию поведения, когда действительно генерируется исключение. В частности, я полагаю, что лучше всего писать код с гарантией отсутствия ошибок, если ситуация позволяет это.
Дело в том, как я узнаю, что мой код не может выдавать?
Точнее:
- Допустим, что все функции, которые я использую, не могут выдавать (у них есть
noexcept(true)
спецификатор, который я проверяю с помощью static_assert , и реализованы для его обеспечения). - Зная это, может ли что-то все еще выдавать, например, операции над базовыми типами или вызовы функций (не сама функция, а вызов функции)?
- Может ли ошибка возникнуть, не приводя к исключению (например, я слышал, что деление int на ноль приводит к ошибке, но не выдает)
Комментарии:
1. Деление на 0, переполнение буфера, безопасность ОС, числовое переполнение и т. Д. И т. Д. «как я могу знать, что мой код никогда не выдаст никаких исключений?» — вы не можете — лучшее, что вы можете сделать, это решить, что делать, если он выдаст исключение.
2. В принципе, все в стандарте, в котором говорится, что он будет выдавать исключение, плюс любое использование ключевого слова throw 🙂
3. @Drax: плюс любое появление UB, естественно.
4. @Deduplicator удачи, полагаясь на это 🙂
5. @Drax: Конечно, я полагаюсь на то, что ему разрешено создавать исключения, я просто не полагаюсь на это. 😉