CodeBlanks Logo Icon CodeBlanks

constinit

C++20 constinit ile sabit başlatma öğrenirsin.

constinit

constinit (C++20) statik veya thread storage duration süresine sahip bir değişkenin derleme zamanında ilklendirilmesini zorunlu kılar. Örnek: constinit int counter = 10;.

constexpr gibi derleme zamanı ilklendirme ister; ama değişkeni sabit yapmaz. Yani counter = 25; ataması geçerlidir. Genel ayar sayacı, yapılandırma değeri gibi derleme zamanında başlayan ama sonradan değişebilen değerler için kullanılır.

Statik ilklendirme garantisi

Genel bir int counter = compute(); değişkeni dynamic initialization ile başlar; bu, program çalışırken compute() çağrısı yapar. Dinamik ilklendirme sırası dosyalar arası belirsizse static initialization order fiasco oluşur.

constinit int counter = 10; ise constant initialization ile başlar; program başlamadan hazır olur. Sıralama problemi yoktur; değer her zaman belirlidir. Bu yüzden güvenilir genel sabitler için constinit tercih edilir.

Uygulama constinit counter kullan

Global constinit int counter = 10; tanımla. main içinde counter = 25; ata ve std::cout << counter; yaz.

Başlangıç kodu

main.cpp
#include <iostream>

// constinit counter değişkenini buraya tanımla

int main() {
    // counter'ı değiştir ve yazdır
    return 0;
}

Örnek çözüm

main.cpp
#include <iostream>

constinit int counter = 10;

int main() {
    counter = 25;
    std::cout << counter;
    return 0;
}

Beklenen çıktı

25

Soru ve cevaplar

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

1 constinit bildirimini tamamla

Soru
constinit int counter = ____;
Cevap
constinit int counter = 10;

Açıklama: counter'ı 10 ile başlatıyoruz.

2 Anahtar kelimeyi özelliğine eşle

Kavram Anlamı
constinit int x = 5; Statik, değiştirilebilir
constexpr int x = 5; Statik, sabit
const int x = 5; Sabit, derleme garantisi yok
int x = 5; Çalışma zamanı değişkeni

3 constinit, constexpr'in izin vermediği ne yapar?

main.cpp
constinit int counter = 10;
int main() { counter = 25; }
  • Her zaman derleme zamanı
  • Otomatik inline olur
  • Sadece sınıf içinde
  • Statik sürede değiştirilebilir Doğru cevap

Açıklama: constinit sabit değildir; statik değişkeni derleme zamanında başlatır ama sonradan değiştirilebilir.

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