Sobes.tech
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