Sobes.tech
Middle+

Noexcept olarak işaretlenmiş bir fonksiyonda istisna atılırsa ne olur?

sobes.tech yapay zeka

AI'dan gelen yanıt

Program, std::terminate() çağrısı ile hemen sonlandırılacaktır. Bu, noexcept olarak ilan edilen fonksiyon dışına çıkan istisnaları işlemek için C++'ta tanımlanmış standart davranıştır.

Bununla ilgili C++ standardının bölümleri şunlardır:

  • [except.spec] noexcept spesifikasyonu.
  • [except.terminate] std::terminate() çağrısı ile işleme.

Örnek:

#include <iostream>
#include <stdexcept>
#include <cstdlib> // std::terminate için

void f() noexcept {
    throw std::runtime_error("noexcept fonksiyonunda hata oluştu");
}

int main() {
    try {
        f();
    } catch (...) {
        // Bu catch bloğu ulaşmayacak
        std::cerr << "İstisna yakalandı" << std::endl;
    }

    // Eğer f() istisna atarsa, std::terminate() bu noktadan önce çağrılır
    std::cout << "Program devam ediyor (bu gösterilmeyecek)" << std::endl;

    return 0;
}

Bu programın çıktısı, uygulamaya bağlı olabilecek std::terminate() işleyicisinden gelen bir mesaj içerecek, ancak genellikle sonlandırma nedenine ilişkin bilgi içerir.

terminate called after throwing an instance of 'std::runtime_error'
  what():  noexcept fonksiyonunda hata oluştu