Middle+
Co se stane, pokud do funkce označené jako noexcept vypustí výjimka?
sobes.tech AI
Odpověď od AI
Program bude okamžitě ukončen voláním std::terminate(). Toto je standardní chování definované v C++ pro zpracování výjimek, které přesahují rozsah funkce deklarované jako noexcept.
Relevantní části standardu C++ k tomuto jsou:
- [except.spec] Specifikace
noexcept. - [except.terminate] Zpracování voláním
std::terminate().
Příklad:
#include <iostream>
#include <stdexcept>
#include <cstdlib> // Pro std::terminate
void f() noexcept {
throw std::runtime_error("Došlo k chybě v noexcept funkci");
}
int main() {
try {
f();
} catch (...) {
// Tento blok catch nebude dosažen
std::cerr << "Výjimka zachycena" << std::endl;
}
// Pokud f() vyhodí výjimku, bude voláno `std::terminate()` před tímto bodem
std::cout << "Program pokračuje v běhu (nebude zobrazeno)" << std::endl;
return 0;
}
Výstup tohoto programu bude obsahovat zprávu od zpracovatele std::terminate(), který může záviset na implementaci, ale obvykle obsahuje informace o důvodu ukončení.
tterminate called after throwing an instance of 'std::runtime_error'
what(): Došlo k chybě v noexcept funkci