The noexcept specifier declares that a function won't throw exceptions. This enables optimizations and documents intent. Usage: void safeFunction() noexcept { . } If this function throws, std::terminate is called.
The program crashes instead of unwinding. Use noexcept for functions that can't fail: move constructors, swap functions, simple getters. This lets containers optimize (e.g., vector uses moves instead of copies when resize).
Don't overuse noexcept. If a function might throw, leave it off. A noexcept function that throws is worse than one that properly propagates exceptions.