каждым методом класса в пользу оптимизации. Следует его ставить везде или нет?
Да, следует, если этот метод не кидает ничего. Особенно на конструкторы и оператор присваивания
Учти, что методов где его можно поставить обычно очень мало
Спасибо за ответ)
Потому, что это значит что ничто изнутри (включая контейнеры и все такое прочее) не выкинет исключение никогда (контейнеры могут, но спецификация это пытается запретить)?
Я понял что это для оптимизации и локализации точки падения
Да, в основном для оптимизации - мы как бы проводим границу говорим: «исключение никогда не перейдет эту границу», и компилятор может не создавать код передачи исключения от этого места дальше.
НЕ для локализации
Мы можем посмотреть сразу в то место где была перейдена граница, разве не так?
И да и нет. Мы обязаны обработать все исключения до пересечения этой границы.
В лучшем случае, попытка перейти эту границу просто не скомпилируется. В худшем, исключения просто будут исчезать и все будет работать очень странно.
Он обязан создать вызов std::terminate
Такое возможно только при вызове из extern "C" контекста
А ну да - сценарий «все пропало»
Не скомпилируется тогда когда мы добавили условия в noexcept. А когда исключения могут исчезнуть?
А, тут я перепутал немного: это происходит на границах контекстов C и C++ - C не знает об исключениях.
Хотел переспросить, а как в случае get/set методов?
Ничем не отличается...
Например если в программе достаточно много их, прийдётся все специфицировать.
Обсуждают сегодня