CodeBlanks Logo Icon CodeBlanks

noexcept

noexcept ile exception belirtimini öğrenirsin.

noexcept nedir?

noexcept, bir fonksiyonun istisna fırlatmayacağını belirten bir belirteçtir. Derleyiciye ve okuyana bir güvenlik sözleşmesi verir. İstisna fırlatırsa std::terminate çağrılır.

Örnek: void swap_ints(int& a, int& b) noexcept { int t = a; a = b; b = t; }. Bu fonksiyon basit atamalar yapar, istisna fırlatamaz. noexcept sayesinde derleyici daha iyi kod üretir ve çağıranlar rahatça kullanır. Özellikle yıkıcılar, swap ve taşıma (move) işlemleri noexcept olmalıdır. Bu, taşıma semantiğinde optimim davranış için de kritiktir.

noexcept işlev işaretçisi

noexcept, fonksiyon türünün bir parçasıdır. Bir noexcept fonksiyon işaretçisi, yalnızca noexcept fonksiyonları kabul eder.

Örnek: void (*p)(int) noexcept = &some_func;. Burada some_func da noexcept olmalıdır. Bu, geri çağırma (callback) arayüzlerini güvenli yapar: arayan, geri çağırmanın istisna fırlatmayacağını bilir. Modern C++'ta noexcept belirtmek, hem belge hem sözleşme görevi görür. Standart kütüphane, noexcept bilgisini taşıma işlemlerinde en iyi davranışı seçmek için kullanır.

Uygulama noexcept swap_ints yaz

void swap_ints(int& a, int& b) noexcept fonksiyonunu yaz; gövdesi int t = a; a = b; b = t; olsun. main içinde int x = 3, y = 7; tanımla, swap_ints(x, y) çağır ve std::cout << x << y; ile yazdır.

Başlangıç kodu

main.cpp
#include <iostream>

// swap_ints fonksiyonunu noexcept ile yaz

int main() {
    // x ve y tanımla, çağır ve yazdır
    return 0;
}

Örnek çözüm

main.cpp
#include <iostream>

void swap_ints(int& a, int& b) noexcept {
    int t = a;
    a = b;
    b = t;
}

int main() {
    int x = 3, y = 7;
    swap_ints(x, y);
    std::cout << x << y;
    return 0;
}

Beklenen çıktı

73

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 noexcept kullanımını eşle

Kavram Anlamı
destructor noexcept olmalı
swap nothrow takas
move constructor noexcept taşıma
std::terminate İhlalde çağrılır

2 noexcept bir fonksiyon istisna fırlatırsa ne olur?

  • std::terminate çağrılır Doğru cevap
  • İstisna yok sayılır
  • Program devam eder
  • Derleme hatası verilir

Açıklama: noexcept bir fonksiyon istisna fırlatırsa std::terminate çağrılır ve program sonlanır.

3 noexcept anahtar sözcüğü

Soru
void swap_ints(int& a, int& b) ____ { int t = a; a = b; b = t; }
Cevap
void swap_ints(int& a, int& b) noexcept { int t = a; a = b; b = t; }

Açıklama: noexcept, fonksiyonun istisna fırlatmayacağını söyler.

İleri seviye bölümündeki tüm dersler