constinit
- C++ kursu
- Uzman
- Ders 11/47
- 5 dk
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
#include <iostream>
// constinit counter değişkenini buraya tanımla
int main() {
// counter'ı değiştir ve yazdır
return 0;
}Örnek çözüm
#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
constinit int counter = ____;
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?
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.