MODERN C++ EĞİTİMİ
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
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.



