Middle+
Noexcept bilan belgilangan funktsiyada istisno yuzaga kelsa nima bo'ladi?
sobes.tech AI
AIdan javob
Dastur darhol std::terminate() chaqirilishi bilan yakunlanadi. Bu, noexcept bilan e'lon qilingan funktsiyadan tashqariga chiqadigan istisnolarni boshqarish uchun C++ da belgilangan standart xulqdir.
Buning bilan bog‘liq C++ standarti bo‘limlari quyidagilardir:
- [except.spec]
noexceptspetsifikatsiyasi. - [except.terminate]
std::terminate()chaqirilishi bilan boshqarish.
Misol:
#include <iostream>
#include <stdexcept>
#include <cstdlib> // std::terminate uchun
void f() noexcept {
throw std::runtime_error("noexcept funksiyada xato yuz berdi");
}
int main() {
try {
f();
} catch (...) {
// Bu catch bloki amalga oshmaydi
std::cerr << "Istisno ushlanmoqda" << std::endl;
}
// Agar f() istisno chiqaradigan bo‘lsa, std::terminate() bu nuqtadan oldin chaqiriladi
std::cout << "Dastur davom etmoqda (bu ko‘rsatilmaydi)" << std::endl;
return 0;
}
Bu dastur chiqishi std::terminate() ning ishlovchisi tomonidan berilgan xabarni o‘z ichiga oladi, bu esa amalga oshirishga bog‘liq bo‘lishi mumkin, lekin odatda tugash sababini ko‘rsatadi.
tterminate called after throwing an instance of 'std::runtime_error'
what(): noexcept funksiyada xato yuz berdi