Ключевое слово noexcept
может быть соответствующим образом применено ко многим подписям функций, но я не уверен, когда я должен использовать его на практике. Основываясь на том, что я прочитал до сих пор, добавление noexcept
в последнюю минуту, похоже, затрагивает некоторые важные проблемы, возникающие при броске конструкторов. Тем не менее, я все еще не могу дать удовлетворительные ответы на некоторые практические вопросы, которые привели меня к тому, чтобы я больше читал о noexcept
в первую очередь.
-
Есть много примеров функций, которые, как я знаю, никогда не будут бросать, но для которых компилятор не может определить это самостоятельно. Должен ли я добавить
noexcept
к объявлению функции в всех таких случаях?Чтобы подумать о том, нужно ли добавлять
noexcept
после объявления каждого, значительно снизит производительность программиста (и, откровенно говоря, будет боль в заднице). В каких ситуациях я должен быть более осторожным в отношении использованияnoexcept
, и для каких ситуаций я могу уйти с подразумеваемойnoexcept(false)
? -
Когда я могу реально ожидать улучшения производительности после использования
noexcept
? В частности, дайте пример кода, для которого компилятор С++ способен генерировать более эффективный машинный код после добавленияnoexcept
.Лично я забочусь о
noexcept
из-за большей свободы, предоставляемой компилятору, для безопасного применения определенных видов оптимизации. Таким образом, современные компиляторы используютnoexcept
? Если нет, могу ли я ожидать, что некоторые из них сделают это в ближайшем будущем?