Middle+
Kas notiks, ja funkcijā, kas ir atzīmēta kā noexcept, notiks izņēmums?
sobes.tech AI
Atbilde no AI
Programma nekavējoties tiks pārtraukta, izsaucot std::terminate(). Tas ir standarta uzvedība, kas noteikta C++ valodā, lai apstrādātu izņēmumus, kas iziet ārpus funkcijas, kas ir deklarēta kā noexcept.
Ar šo saistītās C++ standarta sadaļas ir:
- [except.spec]
noexceptspecifikācija. - [except.terminate] Apstrāde, izsaucot
std::terminate().
Piemērs:
#include <iostream>
#include <stdexcept>
#include <cstdlib> // `std::terminate`
void f() noexcept {
throw std::runtime_error("Notikusi kļūda noexcept funkcijā");
}
int galvenais() {
try {
f();
} catch (...) {
// Šis catch bloks netiks sasniegts
std::cerr << "Izņēmums noķerts" << std::endl;
}
// Ja f() izmet izņēmumu, `std::terminate()` tiks izsaukts pirms šīs rindas
std::cout << "Programma turpinās darbību (netiks parādīts)" << std::endl;
return 0;
}
Šīs programmas izvade saturēs std::terminate() apstrādātāja ziņojumu, kas atkarīgs no ieviešanas, bet parasti ietver informāciju par izbeigšanas iemeslu.
tterminate called after throwing an instance of 'std::runtime_error'
what(): Notikusi kļūda noexcept funkcijā