Özet - Metaprogramming
- C++ kursu
- Uzman
- Ders 6/47
- 5 dk
recursive template, constexpr ve consteval'i birleştirerek bir factorial yazarsın.
Özet - Metaprogramming
Bu grupta derleme zamanı hesabın üç yolunu gördün: recursive template, constexpr fonksiyon ve consteval. Hepsi çalıştırılabilir dosyaya sabit gömer; aralarındaki fark esneklik ve zorunluluktur.
Şimdi bunları birleştirip constexpr factorial yazacaksın. Bu fonksiyon recursive template'in 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(5); ifadesi f = 120 sabitini üretir. Bu, recursive template'in aynısıdır ama şablon yazımı yoktur; kod okunaklıdır.
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(5); tanımla ve std::cout << f; yaz.
Başlangıç kodu
#include <iostream>
// constexpr factorial fonksiyonunu buraya tanımla
int main() {
// f 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(5);
std::cout << f;
return 0;
}Beklenen çıktı
120
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Hangi araç yalnızca derleme zamanında çalışır?
constexpr int f(int);
consteval int g(int);
template <int N> struct S { static const int value = N; };- template struct
- constexpr
- consteval Doğru cevap
- inline
Açıklama: consteval 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ı |
|---|---|
recursive template |
Şablon uzmanlaşması |
constexpr |
Esnek derleme/çalışma |
consteval |
Yalnızca derleme |
Typelist |
Tür paketi |