consteval
- C++ kursu
- Uzman
- Ders 10/47
- 5 dk
C++20 consteval ile anlık fonksiyon öğrenirsin.
consteval
consteval (C++20) bir immediate function (anında fonksiyon) tanımlar. Bu fonksiyon mutlaka derleme zamanında değerlendirilmelidir. Örnek: consteval int square(int x) { return x * x; }.
constexpr int s = square(5); derleme zamanında 25 üretir. Ancak int n = readInput(); int r = square(n); derleme hatası verir: consteval, çalışma zamanı argümanı reddeder. constexpr'in aksine consteval esnek değildir, katıdır.
consteval vs constexpr
consteval ve constexpr arasındaki fark esnekliktir. constexpr fonksiyon hem derleme hem çalışma zamanında çalışabilir; consteval ise yalnızca derleme zamanında.
Bir constexpr fonksiyonu consteval'e çevirirsen, eski çalışma zamanı çağrıları derleme hatası verir. consteval, derleme zamanı garantisi istediğinde kullanılır: şifreleme tabloları, sabit yapılandırma, format dizeleri. Hata erken yakalanır; çalışma zamanı maliyeti sıfır olur.
Uygulama consteval square yaz
consteval int square(int x) yaz; gövdesi return x * x;. main içinde constexpr int s = square(6); tanımla ve std::cout << s; yaz.
Başlangıç kodu
#include <iostream>
// consteval square fonksiyonunu buraya tanımla
int main() {
// s sabitini tanımla ve yazdır
return 0;
}Örnek çözüm
#include <iostream>
consteval int square(int x) {
return x * x;
}
int main() {
constexpr int s = square(6);
std::cout << s;
return 0;
}Beklenen çıktı
36
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 consteval fonksiyonu çalışma zamanı değişkeniyle çağırırsan ne olur?
consteval int square(int x) { return x * x; }
int n = readInput();
int r = square(n);- Çalışma zamanında çalışır
- Uyarı verilir ama geçer
- Derleme hatası verir Doğru cevap
- Otomatik constexpr'e dönüşür
Açıklama: consteval, çalışma zamanı argümanını reddeder; derleme hatası verir.
2 consteval gövdesini tamamla
consteval int doubleIt(int x) { return x * ____; }
consteval int doubleIt(int x) { return x * 2; }
Açıklama: x * 2 değerin iki katını verir.
3 Anahtar kelimeyi özelliğine eşle
| Kavram | Anlamı |
|---|---|
consteval |
Her zaman derleme zamanı |
constexpr |
Derleme veya çalışma |
constinit |
Statik başlatma |
if constexpr |
Derleme zamanı dal |