Middle+
Kas nutiks, jei funkcijoje, pažymėtoje kaip noexcept, įvyks išimtis?
sobes.tech AI
Atsakymas iš AI
Programa iš karto bus baigtas iškvietus std::terminate(). Tai yra standartinis elgesys, apibrėžtas C++ kalboje, norint tvarkyti išimtis, kurios išlenda už funkcijos, paskelbtos kaip noexcept, ribų.
Susijusios C++ standarto dalys:
- [except.spec]
noexceptspecifikacija. - [except.terminate] Tvarkymas iškviečiant
std::terminate().
Pavyzdys:
#include <iostream>
#include <stdexcept>
#include <cstdlib> // `std::terminate`
void f() noexcept {
throw std::runtime_error("Įvyko klaida noexcept funkcijoje");
}
int main() {
try {
f();
} catch (...) {
// Šis catch blokas nebus pasiektas
std::cerr << "Išimtis sugauta" << std::endl;
}
// Jei f() išmes išimtį, `std::terminate()` bus iškviesta prieš šią eilutę
std::cout << "Programa tęsiasi (nebus parodyta)" << std::endl;
return 0;
}
Šios programos išvestis turės std::terminate() apdorotojo pranešimą, kuris gali priklausyti nuo įgyvendinimo, bet paprastai apima informaciją apie užbaigimo priežastį.
tterminate called after throwing an instance of 'std::runtime_error'
what(): Įvyko klaida noexcept funkcijoje