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]
noexceptspesifikasyonu. - [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