Modern C++ 3D logosu yanında iki modern C++ modül bloğu bembeyaz arka planda premium kompozisyon

Modern C++ eğitimi, "modern" sözcüğünü söz dizimi değişikliği olarak değil yazma alışkanlığı olarak benimseyen bir programdır. C++11/14/17/20/23 standartlarındaki büyük değişikliklerin ürün koduna nasıl yedirileceği somut örneklerle işlenir; auto, decltype ve structured binding ile modern type system kurulur.

Program sonunda katılımcı, lambda ve generic lambda ile fonksiyonel pattern uygular; move semantics, rvalue reference ve perfect forwarding'i bilinçle kullanır; constexpr ve consteval ile compile-time hesaplama yapar. Concept ile SFINAE karmaşıklığını yerine geçirme, coroutine ve ranges library eğitimin advanced kapanışıdır.

Katılımcı Profili

Bu eğitim, modern C++'ı söz dizimi değişikliği olarak değil yazma alışkanlığı olarak benimsemek isteyen rollere yöneliktir:

  • C++ Geliştiriciler: C++03/98'den modern C++'a geçiş yapan mühendisler
  • Sistem Programcıları: Modern özelliklerle eski codebase'i refactor edenler
  • Oyun Geliştiriciler: Modern C++ ile engine ve gameplay yazan ekipler
  • Kütüphane Geliştiriciler: Modern API tasarlayan roller
  • Gömülü Geliştiriciler: constexpr ile compile-time logic yazan mühendisler

Ön Gereklilikler

Bu eğitime katılım için aşağıdaki ön bilgiler önerilir:

  • Klasik C++'a (C++98 veya C++03) temel düzeyde aşinalık
  • OOP kavramlarına (class, inheritance, polymorphism) rahatlık
  • Pointer, referans ve memory model'e aşinalık
  • CMake veya benzeri build sistem deneyimi
  • Modern C++ özelliklerini ürün koduna taşımaya isteklilik

Süresi ve Tarihi

Süre: 3 gün. Bu süre standart program içindir; ek modüllere ve hedefe göre süre özelleştirilebilir.
Eğitim tarihleri ve saatleri, ekibinizin uygunluğuna göre birlikte planlanır.

Kazanımlar

Bu eğitim sonunda katılımcı, "modern C++" cümlesini söz dizimi değişikliği olarak değil yazma alışkanlığı olarak benimser:

  • C++11/14/17/20/23 standartlarındaki büyük değişiklikleri ürün koduna yedirir
  • auto, decltype ve structured binding ile modern type system kurar
  • Lambda ve generic lambda ile fonksiyonel pattern uygular
  • Move semantics, rvalue reference ve perfect forwarding'i bilinçle kullanır
  • constexpr ve consteval ile compile-time hesaplama yapar
  • Concept ile SFINAE karmaşıklığını yerine geçirir
  • Coroutine ve ranges library ile async ve lazy evaluation tasarlar

Modern C++ Eğitimi Konuları

1. C++ Standartları - Sürüm Akışı

  • C++98'den modern C++'a evrim
  • C++11 ile gelen büyük değişiklikler
  • C++14, C++17, C++20, C++23 ekleri
  • Compiler support: GCC, Clang, MSVC durum tablosu
  • Resmi kaynak: C++ Core Guidelines

2. auto ve Type Deduction

  • auto ile local variable type deduction
  • decltype ve decltype(auto)
  • auto vs explicit type karar matrisi
  • Class Template Argument Deduction (CTAD)

3. Lambda Expression ve Capture

  • Lambda söz dizimi ve closure
  • Capture by value, reference, this
  • Generic lambda (auto parametre)
  • Constexpr lambda ve immediate function

4. Move Semantics ve Rvalue Reference

  • lvalue ve rvalue değer kategorileri
  • Move constructor ve move assignment
  • std::move ve std::forward
  • Copy elision ve RVO/NRVO
  • Universal reference (T&&)

5. Smart Pointers - unique, shared, weak

  • unique_ptr ile tek sahiplik
  • shared_ptr ve referans sayımı
  • weak_ptr ile döngüsel referans önleme
  • make_unique, make_shared avantajları
  • Custom deleter

6. constexpr ve Compile-Time Computation

  • constexpr fonksiyon ve değişken
  • consteval (immediate function)
  • constinit ile static initialization
  • Compile-time hesaplama avantajı

7. Range-Based For ve Initializer List

  • Range-based for syntax
  • Initializer list ile uniform initialization
  • Brace elision ve narrowing conversion
  • Designated initializer

8. Variadic Templates ve Fold Expression

  • Parameter pack ve recursion
  • Fold expression ile sade kullanım
  • std::tuple ve std::apply
  • Template recursion vs fold

9. std::optional, std::variant, std::any

  • optional ile değer yokluğu
  • variant ile type-safe union
  • any ile heterojen container
  • visit() pattern ile compile-time dispatch

10. Structured Binding

  • Structured binding declaration
  • Tuple, pair, struct ile deconstruction
  • Range-based for ile birleşim
  • Map iteration örnekleri

11. Concepts ve Constraint

  • Concept tanımı ve requires ifadesi
  • Built-in concept'ler: integral, floating_point
  • SFINAE'den Concepts'e geçiş
  • Daha okunabilir hata mesajı

12. Modules ile Header Devrinin Sonu

  • module ve import söz dizimi
  • Header'a göre derleme süresi kazancı
  • Modüle ihracat: export
  • Hibrit projelerde adaptasyon

13. Coroutines - co_await, co_yield, co_return

  • Stackless coroutine modeli
  • co_await, co_yield, co_return
  • Promise type ve awaitable
  • Generator ve task pattern

14. Ranges Library

  • Range ve view kavramı
  • Pipe (|) operatörü ile zincirleme
  • filter, transform, take, drop view'ları
  • Lazy evaluation faydası

15. Three-Way Comparison (Spaceship)

  • operator<=> ile tek operatörden tüm karşılaştırmalar
  • Default comparison via =default
  • strong_ordering, weak_ordering, partial_ordering
  • Auto-generated equality

16. std::format ve std::print

  • std::format ile type-safe formatlama
  • std::print ile sade I/O
  • printf ve iostream alternatifi
  • Custom formatter yazımı

17. Algorithm ve Utility Yenilikleri

  • std::span ile non-owning view
  • std::string_view ile zero-copy
  • std::filesystem ile yol yönetimi
  • std::chrono ve calendar/time zone

18. Legacy Code Modernizasyon

  • NULL → nullptr migration
  • Raw pointer → smart pointer
  • typedef → using
  • clang-tidy modernize check'leri
  • Aşamalı modern C++ geçişi

MODERN C++ EĞİTİMİ ile İlgili
Sıkça Sorulan Sorular ve Cevapları


Concept ile SFINAE arasında karar nasıl verilir?

SFINAE eski yaklaşım, std::enable_if zincirleri karmaşık ve okunması zor; hata mesajları korkunç. Concept (C++20) requires clause ile compile-time constraint okunabilir biçimde ifade eder, hata mesajları açıklayıcı. Yeni kod Concept tercih edilir; SFINAE geri uyum için kalır.

Coroutine ne zaman fayda sağlar, ne zaman gereksiz?

Coroutine asenkron I/O, generator pattern ve stack-saver iş akışında değer üretir — async/await deneyimi C++'a gelir. Senkron CPU-bound iş için standart fonksiyon daha sade. Standard library coroutine support'u sınırlı; cppcoro veya Asio gibi ek kütüphane gerekir.

Ranges library klasik algoritmadan farkı?

std::ranges algoritma + view kombinasyonu lazy evaluation sağlar — | (pipe) ile zincirleme okunur (vec | filter | transform | take). Klasik iteratör çiftli API kalabalık. View'lar materialize etmez, sadece son tüketimde değerlendirilir. Compile süresi etkisini ölçmek gerekir.

constexpr, consteval ve constinit farkı nedir?

constexpr compile-time veya runtime'da değerlendirilebilir. consteval (C++20) sadece compile-time — runtime kullanım hata. constinit static initialization'ın compile-time gerçekleştiğini garanti eder ama const olmayabilir. Üçü birlikte zero-cost compile-time computation'ı sağlar.

std::variant ile inheritance arasında karar?

std::variant closed-set, polymorphism (variant). visitor pattern ile std::visit kullanılır. Inheritance açık-set, runtime polymorphism (virtual). Variant compile-time exhaustiveness check sağlar, virtual overhead'i yok. Alt sınıflar bilinen ve sabitse variant; bilinmiyorsa inheritance.

Modules header'a göre build süresini ne kadar etkiler?

Header her translation unit'te yeniden compile edilir — büyük projelerde dakikalarca süreyi açıklar. Modules bir kez derlenir, BMI (Binary Module Interface) cache edilir. Pratikte %50-80 build süresi azaltabilir. Ancak toolchain (CMake, Clang, MSVC) uyumu hâlâ olgunlaşıyor.