Özet - constexpr
- C++ kursu
- Uzman
- Ders 12/47
- 5 dk
constexpr, consteval ve constinit'i birleştirerek bir lookup tablosu yazarsın.
Özet - constexpr
Bu grupta derleme zamanı araçlarını gördün: constexpr değişken, constexpr fonksiyon, if constexpr, consteval ve constinit. Hepsi derleme zamanında değer üretir; aralarındaki fark esneklik ve zorunluluktur.
Şimdi bunları bir constexpr factorial'da birleştireceksin. Bu fonksiyon recursive şablonun davranışını constexpr fonksiyonla sağlar; constexpr int factorial(int n) hem derleme hem çalışma zamanında kullanılabilir.
constexpr factorial
Bir constexpr fonksiyon içinde if (n <= 1) return 1; taban durumu ve return n * factorial(n - 1); recursive adımı yazılır. Derleyici sabit argümanla çağrınca zinciri derleme zamanında açar.
Örnek: constexpr int f = factorial(4); ifadesi f = 24 sabitini üretir. Bu, recursive şablonun aynısıdır ama şablon yazımı yoktur; kod okunaklıdır ve çalışma zamanında da çağrılabilir.
Uygulama constexpr factorial yaz
constexpr int factorial(int n) yaz. Gövdesi: if (n <= 1) return 1; return n * factorial(n - 1);. main içinde constexpr int f = factorial(4); tanımla ve std::cout << f; yaz.
Başlangıç kodu
#include <iostream>
// constexpr factorial fonksiyonunu buraya tanımla
int main() {
// f sabitini tanımla ve yazdır
return 0;
}Örnek çözüm
#include <iostream>
constexpr int factorial(int n) {
if (n <= 1) return 1;
return n * factorial(n - 1);
}
int main() {
constexpr int f = factorial(4);
std::cout << f;
return 0;
}Beklenen çıktı
24
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Hangi anahtar kelime fonksiyonu yalnızca derleme zamanında çalışır?
constexpr int a(int);
consteval int b(int);
constinit int c = 0;- consteval Doğru cevap
- constinit
- constexpr
- const
Açıklama: consteval (immediate function) yalnızca derleme zamanında çalışır.
2 Recursive adımı tamamla
constexpr int factorial(int n) { return n * factorial(n - ____); }
constexpr int factorial(int n) { return n * factorial(n - 1); }
Açıklama: n * factorial(n-1) recursive adımdır.
3 Aracı özelliğine eşle
| Kavram | Anlamı |
|---|---|
constexpr |
Esnek derleme/çalışma |
consteval |
Yalnızca derleme |
constinit |
Statik başlatma |
if constexpr |
Derleme zamanı dal |