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
noexceptto the function declaration in all such cases?
Having to think about whether or not I need to append
noexceptafter every function declaration would greatly reduce programmer productivity (and frankly, would be a pain in the neck). For which situations should I be more careful about the use of
noexcept, and for which situations can I get away with the implied
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 of
Personally, I care about
noexceptbecause of the increased freedom provided to the compiler to safely apply certain kinds of optimizations. Do modern compilers take advantage of
noexceptin this way? If not, can I expect some of them to do so in the near future?