CodeBlanks Logo Icon CodeBlanks

C++17 ve C++20

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

main.cpp
#include <iostream>
#include <optional>

// half_even fonksiyonunu yaz

int main() {
    auto r = half_even(8);
    // Sonucu yazdır
    return 0;
}

Örnek çözüm

main.cpp
#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

Soru
std::optional<int> half_even(int x) {
    if (x % 2 == 0) return x / 2;
    return ____;
}
Cevap
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)

İleri seviye bölümündeki tüm dersler