Es ist möglich, dass eine Funktion, die nicht wirft, tatsächlich geworfen wird.
Wenn eine noexcept
Funktion tut werfen, wird terminate
aufgerufen, wodurch die Verheißung, nicht zur Laufzeit zu werfen.
// The compiler does not check the `noexcept` specification at compile time.
void f() noexcept // Promises to not throw any exception
{
throw runtime_error("error"); // Violates the exception specification
}
angeben, dass eine Funktion verspricht die Anrufer nicht der Nicht-Wurf Funktion werfen, dass sie nie mit Ausnahmen befassen müssen.
Entweder wirft die Funktion nicht oder das gesamte Programm wird beendet.
Versuchen Sie es .......... –
['std :: terminate'] (http://cdn.theatlantic.com/assets/media/img/mt.2014/2012/term/lead_large .jpg) – user657267
Sorry, der Titel ist irreführend. Die eigentliche Frage ist natürlich "Warum sollte ein Compiler zulassen, dass eine noexcept-Funktion eine throw-Anweisung enthält?". – tunnuz