CodeBlanks Logo Icon CodeBlanks

constexpr if

constexpr if ile derleme zamanı dallanma öğrenirsin.

constexpr if

if constexpr (C++17) derleme zamanında değerlendirilen bir koşuldur. Koşul false ise o dal derlenmez; tamamen atılır. Örnek: if constexpr (std::is_integral_v<T>) return v + 1; else return v;.

Sıradan if her iki dalı da derler ve çalışma zamanında seçer; if constexpr ise yalnızca uygun dalı derler. Şablonlarda bu, Tür desteklenmeyen dalın derleme hatası vermesini engeller.

Atılan dal derlenmez

Bir şablon içinde if constexpr kullanmazsan, her dal tüm türler için derlenir. Bir dal v.size() çağırıyor ama v bir int ise derleme hatası alırsın.

if constexpr ile atılan dal derlenmediği için bu hata oluşmaz. Derleyici yalnızca seçilen dalı işler; böylece tek bir şablon farklı türleri güvenle destekler.

Uygulama if constexpr ile şablon yaz

template <typename T> auto increment(T v) yaz. Gövdesinde if constexpr (std::is_integral_v<T>) { return v + 1; } else { return v; } olsun. main içinde std::cout << increment(7); yaz.

Başlangıç kodu

main.cpp
#include <iostream>
#include <type_traits>

// increment şablonunu buraya tanımla

int main() {
    // Sonucu yazdır
    return 0;
}

Örnek çözüm

main.cpp
#include <iostream>
#include <type_traits>

template <typename T>
auto increment(T v) {
    if constexpr (std::is_integral_v<T>) {
        return v + 1;
    } else {
        return v;
    }
}

int main() {
    std::cout << increment(7);
    return 0;
}

Beklenen çıktı

8

Soru ve cevaplar

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

1 Parçayı rolüne eşle

Kavram Anlamı
if constexpr Derleme zamanı dal
if (cond) Çalışma zamanı dal
std::is_integral_v Tür kontrolü
else Alternatif dal

2 Koşulu tamamla

Soru
if constexpr (std::is_integral_v<____>) { return v + 1; } else { return v; }
Cevap
if constexpr (std::is_integral_v<T>) { return v + 1; } else { return v; }

Açıklama: std::is_integral_v<T> ile T'nin tam sayı türü olup olmadığı kontrol edilir.

3 if constexpr, sıradan if'ten ne yapar?

main.cpp
if constexpr (cond) { ... } else { ... }
  • Daha hızlı çalışır
  • Seçilmeyen dalı derlemez Doğru cevap
  • Yalnızca int ile çalışır
  • Şablon dışında kullanılamaz

Açıklama: if constexpr, false dalını derleme zamanında atar.

Uzman bölümündeki tüm dersler