C++
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.
Örnek çözümü göster
#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;
}
Kendini test et
-
constexpr ile const arasındaki fark nedir?
- constexpr derleme zamanında hesaplanır
- const daha hızlıdır
- constexpr yalnızca double için kullanılır
- const yalnızca sınıflarda kullanılır
Cevabı göster
constexpr derleme zamanında hesaplanır — constexpr derleme zamanında hesaplanabilir; const çalışma zamanı değeri alabilir.
-
constexpr kavramlarını eşleştir
- constexpr
- Derleme zamanı sabiti
- 20 * 30
- Sabit ifade
- readValue()
- Çalışma zamanı
- dizi boyutu
- constexpr ister
-
Derleme zamanı sabiti
____ int width = 800;
Cevabı göster
constexpr int width = 800;
Sıradaki ders: Tür dönüşümü