Sobes.tech
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] noexcept spetsifikatsiyasi.
  • [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