CodeBlanks Logo Icon CodeBlanks

constexpr

constexpr ile derleme zamanı sabitleri tanımlamayı öğrenirsin.

constexpr

constexpr bir değişkenin değerinin derleme zamanında hesaplanabileceğini belirtir. constexpr int width = 800; yazdığında derleyici 800 değerini derleme sırasında hesaplar ve çalıştırılabilir dosyaya gömer.

const ile constexpr arasındaki fark: const yalnızca değişmezliği garanti eder (değer çalışma zamanında belirlenebilir); constexpr hem değişmezliği hem de derleme zamanında hesaplanabilirliği garanti eder.

Sabit ifadeler gerektiren yerlerde (dizi boyutu, şablon parametresi) constexpr kullanılır. Derleyici en iyi optimizasyonu yapabilir.

constexpr kullanımı

constexpr ile tanımlanan değişkenin değeri derleyici tarafından hesaplanabilmelidir. Bu yüzden sağ tarafın sabit ifade olması gerekir: constexpr int area = 20 * 30; geçerlidir çünkü 20 * 30 derleme zamanında hesaplanır.

Ancak constexpr int x = readValue(); geçersizdir çünkü readValue() çalışma zamanında çağrılır. Bu durumda const kullanmalısın.

constexpr fonksiyonlar da tanımlanabilir: bu fonksiyonlar sabit ifade bağlamında çağrıldığında derleme zamanında çalışır. Modern C++'ta performans için yaygın kullanılır.

Uygulama constexpr ile boyut tanımla

main'in üstüne (global alanda) iki constexpr int tanımla: width değeri 800, height değeri 600. main içine iki std::cout satırı ekle: birincisi width, ikincisi height yazsın; her satırı std::endl ile bitir.

Başlangıç kodu

main.cpp
#include <iostream>

// constexpr ile iki boyut tanımla

int main() {
    // std::cout ile yazdır
    return 0;
}

Örnek çözüm

main.cpp
#include <iostream>

// constexpr ile iki boyut tanımla
constexpr int width = 800;
constexpr int height = 600;

int main() {
    // std::cout ile yazdır
    std::cout << width << std::endl;
    std::cout << height << std::endl;
    return 0;
}

Beklenen çıktı

800
600

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 constexpr ile const arasındaki fark nedir?

  • constexpr derleme zamanında hesaplanır Doğru cevap
  • const daha hızlıdır
  • constexpr yalnızca double için kullanılır
  • const yalnızca sınıflarda kullanılır

Açıklama: constexpr derleme zamanında hesaplanabilir; const çalışma zamanı değeri alabilir.

2 constexpr kavramlarını eşleştir

Kavram Anlamı
constexpr Derleme zamanı sabiti
20 * 30 Sabit ifade
readValue() Çalışma zamanı
dizi boyutu constexpr ister

3 Derleme zamanı sabiti

Soru
____ int width = 800;
Cevap
constexpr int width = 800;

Açıklama: constexpr int width derleme zamanı sabitidir.

Başlangıç bölümündeki tüm dersler