C++17 ve C++20
- C++ kursu
- İleri seviye
- Ders 1/83
- 5 dk
C++17 ve C++20'nin yeni özelliklerini öğrenirsin.
Modern C++'a giriş
C++17 ve C++20, dile daha güçlü ve güvenli araçlar katar. C++17; structured bindings, if constexpr, std::optional ve std::variant sunar. C++20 bunlara concepts, ranges ve modules özelliklerini ekler.
Bu sürümler eskimiş API'leri temizler ve derleme zamanı kontrollerini artırır. Hatalı kodlar derleme aşamasında yakalanır; çalışma zamanı maliyeti çoğu zaman sıfırdır. Modern C++'ta ham işaretçi (raw pointer) kullanımı azalır, şablon hata mesajları daha okunaklı olur.
std::optional ile güvenli dönüş
Bir fonksiyon bazen değer üretir, bazen de üretmez. std::optional<T> bu durumu tür güvenli biçimde ifade eder. Değer varsa *opt veya opt.value() ile okunur; yoksa std::nullopt döndürülür.
Örnek: std::optional<int> half_even(int x) çift sayılar için x/2 verir, tekler için std::nullopt. Çağıran taraf if (opt) ile durumu kontrol eder. Bu, -1 gibi büyü sayıları hata kodu olarak kullanmaktan daha güvenlidir.
Uygulama std::optional ile half_even
std::optional<int> half_even(int x) fonksiyonunu yaz: çift sayılar için x / 2 döndürsün, tekler için std::nullopt. main içinde half_even(8) çağır, sonucu if (r) ile kontrol et ve *r değerini std::cout ile yazdır.
Başlangıç kodu
#include <iostream>
#include <optional>
// half_even fonksiyonunu yaz
int main() {
auto r = half_even(8);
// Sonucu yazdır
return 0;
}Örnek çözüm
#include <iostream>
#include <optional>
std::optional<int> half_even(int x) {
if (x % 2 == 0) return x / 2;
return std::nullopt;
}
int main() {
auto r = half_even(8);
if (r) std::cout << *r;
return 0;
}Beklenen çıktı
4
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Hangi özellik C++20 ile geldi?
- Concepts Doğru cevap
- auto tür çıkarımı
- Lambda ifadeleri
- Range-based for döngüsü
Açıklama: Concepts, C++20 ile şablon kısıtları için eklendi.
2 Boş dönen satırı tamamla
std::optional<int> half_even(int x) {
if (x % 2 == 0) return x / 2;
return ____;
}
std::optional<int> half_even(int x) {
if (x % 2 == 0) return x / 2;
return std::nullopt;
}
Açıklama: std::nullopt, 'değer yok' anlamına gelir.
3 Özelliği sürümüne eşle
| Kavram | Anlamı |
|---|---|
structured bindings |
Çoklu açma (C++17) |
if constexpr |
Derleme dalı (C++17) |
concepts |
Şablon kısıtı (C++20) |
ranges |
Görünüm zinciri (C++20) |