Middle+
Čo sa stane, ak v funkcii označenej ako noexcept dôjde k výnimke?
sobes.tech AI
Odpoveď od AI
Program bude okamžite ukončen volaním std::terminate(). Toto je štandardné správanie definované v C++ na spracovanie výnimiek, ktoré presahujú rozsah funkcie deklarovanej ako noexcept.
Relevantné časti štandardu C++ k tomuto sú:
- [except.spec] Špecifikácia
noexcept. - [except.terminate] Spracovanie volaním
std::terminate().
Príklad:
#include <iostream>
#include <stdexcept>
#include <cstdlib> // Pre std::terminate
void f() noexcept {
throw std::runtime_error("Vyskytla sa chyba v noexcept funkcii");
}
int main() {
try {
f();
} catch (...) {
// Tento blok catch nebude dosiahnutý
std::cerr << "Výnimka zachytená" << std::endl;
}
// Ak f() vyhodí výnimku, std::terminate() bude volané pred touto riadkou
std::cout << "Program pokračuje vo vykonávaní (nebude zobrazené)" << std::endl;
return 0;
}
Výstup tohto programu bude obsahovať správu od spracovateľa std::terminate(), ktorý môže závisieť od implementácie, ale zvyčajne obsahuje informácie o dôvode ukončenia.
tterminate called after throwing an instance of 'std::runtime_error'
what(): Vyskytla sa chyba v noexcept funkcii