Middle+
noexcept ilə işarələnmiş funksiyada istisna baş verərsə nə baş verir?
sobes.tech Süni İntellekt
AI-dan cavab
Proqram dərhal std::terminate() çağırışı ilə tamamlanacaq. Bu, noexcept ilə elan edilmiş funksiyadan kənara çıxan istisnaları idarə etmək üçün C++-da müəyyən edilmiş standart davranışdır.
Bununla əlaqəli C++ standartının bölmələri bunlardır:
- [except.spec]
noexceptspesifikasiyası. - [except.terminate]
std::terminate()çağırışı ilə idarəetmə.
Nümunə:
#include <iostream>
#include <stdexcept>
#include <cstdlib> // `std::terminate` üçün
void f() noexcept {
throw std::runtime_error("noexcept funksiyasında xəta baş verdi");
}
int main() {
try {
f();
} catch (...) {
// Bu blok çatlamayacaq
std::cerr << "İstisna tutuldu" << std::endl;
}
// Əgər f() istisna atarsa, `std::terminate()` bu nöqtədən əvvəl çağırılacaq
std::cout << "Proqram davam edir (bu göstərilməyəcək)" << std::endl;
return 0;
}
Bu proqramın çıxışı std::terminate()-in işləyicisi tərəfindən verilmiş mesajı ehtiva edəcək, bu da həyata keçirilməyə bağlı olaraq dəyişə bilər, amma adətən sonlandırma səbəbini göstərir.
tterminate called after throwing an instance of 'std::runtime_error'
what(): noexcept funksiyasında xəta baş verdi