CodeBlanks Logo Icon CodeBlanks

if constexpr

if constexpr ile derleme zamanı koşulu öğrenirsin.

if constexpr

if constexpr (C++17), derleme zamanında değerlendirilen bir koşuldur. false olan dal derlenmez; böylece tür uyumsuzluğu hatası alınmaz. Şablonlarda farklı türler için farklı kod yazmayı kolaylaştırır.

Örnek: if constexpr (std::is_integral_v<T>) return x * 2; else return x; Tamsayılar için çift katı, diğerleri için değeri döndürür. false dalı derlenmediği için std::string ile x * 2 hatası çıkmaz.

Şablonlarda kullanım

Bir şablon hem tamsayı hem de ondalık türlerle çağrılabilir. if constexpr ile her tür için ayrı kod yazılır; if kullansaydık her iki dal da derlenir ve std::string * 2 gibi anlamsız kod hataya yol açardı.

Koşullar için <type_traits> başlığında std::is_integral_v, std::is_floating_point_v gibi sabitler vardır. Bu sabitler true veya false döndürür; if constexpr bu değeri derleme zamanında okur.

Uygulama twice şablonunu yaz

template <typename T> auto twice(T x) şablonunu yaz. if constexpr ile std::is_integral_v<T> doğruysa x * 2 döndür; değilse x döndür. main içinde twice(5) çağır ve sonucu yazdır.

Başlangıç kodu

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

// twice şablonunu yaz

int main() {
    // twice(5) çağır ve yazdır
    return 0;
}

Örnek çözüm

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

template <typename T>
auto twice(T x) {
    if constexpr (std::is_integral_v<T>) return x * 2;
    return x;
}

int main() {
    std::cout << twice(5);
    return 0;
}

Beklenen çıktı

10

Soru ve cevaplar

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

1 if constexpr ne zaman dalları eler?

  • Çalışma zamanında
  • Bağlantı zamanında
  • Derleme zamanında Doğru cevap
  • Yükleme zamanında

Açıklama: if constexpr derleme zamanında dalları değerlendirir.

2 Dalı amacına eşle

Kavram Anlamı
if constexpr (cond) Derleme zamanı dal
if (cond) Çalışma zamanı dal
std::is_integral_v<T> Tür koşulu
else return x Varsayılan dal

3 if constexpr satırını tamamla

Soru
template <typename T>
auto twice(T x) {
    ____ (std::is_integral_v<T>) return x * 2;
    return x;
}
Cevap
template <typename T>
auto twice(T x) {
    if constexpr (std::is_integral_v<T>) return x * 2;
    return x;
}

Açıklama: if constexpr dalı derleme zamanında değerlendirir.

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