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 функцији