constexpr if
- C++ kursu
- Uzman
- Ders 9/47
- 5 dk
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
#include <iostream>
#include <type_traits>
// increment şablonunu buraya tanımla
int main() {
// Sonucu yazdır
return 0;
}Örnek çözüm
#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
if constexpr (std::is_integral_v<____>) { return v + 1; } else { return v; }
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?
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.