CodeBlanks Logo Icon CodeBlanks

Özet - Metaprogramming

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

main.cpp
#include <iostream>

// constexpr factorial fonksiyonunu buraya tanımla

int main() {
    // f tanımla ve yazdır
    return 0;
}

Örnek çözüm

main.cpp
#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?

main.cpp
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

Soru
constexpr int factorial(int n) { return n * factorial(n - ____); }
Cevap
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

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