Middle+
Mi történik, ha egy noexcept-ként megjelölt függvényben kivétel keletkezik?
sobes.tech MI
Válasz az MI-től
A program azonnal befejeződik a std::terminate() hívásával. Ez a viselkedés a C++ szabvány szerint azokra az esetekre vonatkozik, amikor kivételek lépnek ki a noexcept-ként deklarált függvényből.
A témához kapcsolódó C++ szabvány szakaszai:
- [except.spec]
noexceptspecifikáció. - [except.terminate] Kezelés a
std::terminate()hívásával.
Példa:
#include <iostream>
#include <stdexcept>
#include <cstdlib> // A `std::terminate`-hez
void f() noexcept {
throw std::runtime_error("Hiba történt a noexcept függvényben");
}
int main() {
try {
f();
} catch (...) {
// Ez a catch blokk nem fog elérni
std::cerr << "Kivétel elfogva" << std::endl;
}
// Ha f() kivételt dob, a `std::terminate()` a fenti pont előtt lesz meghívva
std::cout << "A program folytatódik (nem fog megjelenni)" << std::endl;
return 0;
}
A program kimenete tartalmazni fog egy üzenetet a std::terminate() kezelőtől, amely a megvalósítástól függően változhat, de általában tartalmazza a befejezés okát.
tterminate called after throwing an instance of 'std::runtime_error'
what(): Hiba történt a noexcept függvényben