CodeBlanks Logo Icon CodeBlanks

Özet - constexpr

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

main.cpp
#include <iostream>

// constexpr factorial fonksiyonunu buraya tanımla

int main() {
    // f sabitini 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(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?

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

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ı
constexpr Esnek derleme/çalışma
consteval Yalnızca derleme
constinit Statik başlatma
if constexpr Derleme zamanı dal

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