constexpr
- C++ kursu
- Başlangıç
- Ders 10/116
- 4 dk
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
#include <iostream>
// constexpr ile iki boyut tanımla
int main() {
// std::cout ile yazdır
return 0;
}Örnek çözüm
#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
____ int width = 800;
constexpr int width = 800;
Açıklama: constexpr int width derleme zamanı sabitidir.