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