Middle+
Mis juhtub, kui noexcept märgitud funktsioonis tekib erand?
sobes.tech AI
Vastus AI-lt
Programm lõpeb koheselt, kutsudes std::terminate(). See on standardkäitumine, mis on määratletud C++-s nende erandite jaoks, mis väljuvad noexcept-ga deklareeritud funktsiooni piiridest.
Selle kohta kehtivad C++ standardi vastavad jaotised:
- [except.spec]
noexceptspetsifikatsioon. - [except.terminate] Töötlemine, kutsudes
std::terminate().
Näide:
#include <iostream>
#include <stdexcept>
#include <cstdlib> // `std::terminate` jaoks
void f() noexcept {
throw std::runtime_error("Viga juhtus `noexcept`-i funktsioonis");
}
int peamine() {
try {
f();
} catch (...) {
// See catch-blokk ei jõua kunagi
std::cerr << "Erand haaratud" << std::endl;
}
// Kui f() viskab erandi, kutsutakse `std::terminate()` enne seda rida
std::cout << "Programm jätkub (ei kuvata)" << std::endl;
return 0;
}
Selle programmi väljund sisaldab std::terminate() töötleja sõnumit, mis võib sõltuda rakendusest, kuid tavaliselt sisaldab teavet lõpetamise põhjuse kohta.
tterminate called after throwing an instance of 'std::runtime_error'
what(): `noexcept`-i funktsioonis toimus viga