The noexcept
keyword can be appropriately applied to many function signatures, but I am unsure as to when I should consider using it in practice. Based on what I have read so far, the last-minute addition of noexcept
seems to address some important issues that arise when move constructors throw. However, I am still unable to provide satisfactory answers to some practical questions that led me to read more about noexcept
in the first place.
There are many examples of functions that I know will never throw, but for which the compiler cannot determine so on its own. Should I append
noexcept
to the function declaration in all such cases?Having to think about whether or not I need to append
noexcept
after every function declaration would greatly reduce programmer productivity (and frankly, would be a pain in the ass). For which situations should I be more careful about the use ofnoexcept
, and for which situations can I get away with the impliednoexcept(false)
?When can I realistically expect to observe a performance improvement after using
noexcept
? In particular, give an example of code for which a C++ compiler is able to generate better machine code after the addition ofnoexcept
.Personally, I care about
noexcept
because of the increased freedom provided to the compiler to safely apply certain kinds of optimizations. Do modern compilers take advantage ofnoexcept
in this way? If not, can I expect some of them to do so in the near future?