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