Sobes.tech
Middle+

Šta će se desiti ako u funkciji označenoj kao noexcept dođe do izuzetka?

sobes.tech АИ

Одговор од АИ

Програм ће бити одмах прекинута позивом std::terminate(). Ово је стандардно понашање дефинисано у C++ за обраду изузетака који излазе изван опсега функције проглашене као noexcept.

Релевантни делови стандарда C++ у вези са тим су:

  • [except.spec] Спецификација noexcept.
  • [except.terminate] Обрада позивом std::terminate().

Пример:

#include <iostream>
#include <stdexcept>
#include <cstdlib> // За std::terminate

void f() noexcept {
    throw std::runtime_error("Дошло је до грешке у noexcept функцији");
}

int main() {
    try {
        f();
    } catch (...) {
        // Овај блок catch неће бити достигнут
        std::cerr << "Изузеће ухваћено" << std::endl;
    }

    // Ако f() баци изузетак, `std::terminate()` ће бити позван пре овог реда
    std::cout << "Програм наставља извршавање (неће бити приказано)" << std::endl;

    return 0;
}

Излаз ове програма ће садржати поруку од обработника std::terminate(), који може зависити од имплементације, али обично укључује информације о разлогу за завршетак.

tterminate called after throwing an instance of 'std::runtime_error'
  what():  Дошло је до грешке у noexcept функцији