İleri C++ Programlama Dili Kursu

kopyalama eliminasyonu (copy elision)

Kopyalama eliminasyonu çok iyi hakim olmamız gereken bir konu. Bu bölümde kopyalama eliminasyonunu önce temel düzeyde tekrar edecek daha sonra kopyalama eliminasyonuna yönelik tipik durumları ayrıntılı olarak ele alacağız. C++17 Standardı ile dile eklenen “mandatory copy elision” ve copy elision‘ı engelleyen senaryolara da değineceğiz. Tipik yapılan hataları ve yanlış anlamaları (misconceptions) konuşacağız.

temporary materialization, prvalue xvalue conversion, unmaterialized object passing, return value optimization (rvo), named return value optimization (nrvo), scenarios blocking copy elision, throwing by value, catching by value, mandatory copy elision, typical mistakes & misconceptions, guidelines

taşıma semantiği (move semantics)

Taşıma semantiği Modern C++’a güç katan en önemli yapılardan biri. Bu bölümde taşıma semantiğini önce temel düzeyde tekrar edecek sonra ileri düzey bilgiler edineceğiz. Bu konuda yapılan tipik hataları ve kullanılan idiyomatik yapıları da ele alacağız.

basic features of move semantics, std::move, move semantics & special member functions, how to use move semantics, reference qualifiers & move semantics, moved-from state, move semantics & exception guarantees, move semantics in STL, move only types, STL moving algorithms, typical mistakes & misconceptions, guidelines

tür çıkarımı (type deduction)

Bu bölümde Modern C++’ın neredeyse tüm araçlarına nüfuz etmiş olan tür çıkarımı konusunu ileri düzeyde ele alacağız.
auto type deduction, decltype specifier, decltype(auto), trailing return type, auto return type, type deduction in lambda expressions

sabit ifadeleri (constant expressions)

C++ diline güç katan en temel araçlardan biri sabit ifadeleri ve derleme zamanında yapılan hesaplamalar. Bu bölümde bu konuya yönelik bazı araçları ileri düzeyde ele alacağız. C++20 ve C++23 standartları ile dile yapılan eklemeleri de inceleyeceğiz.

constexpr variables, constexpr functions, constexpr constructors, literal types, consteval & immediate functions, constinit, constexpr virtual functions, constexpr lambda functions, user defined literals

(advance) namespaces

Bu bölümde isim alanlarını ileri düzeyde inceleyeceğiz. İsim alanları konusunda C++17/20/23 standartları ile gelen önemli eklentileri ve bunların sağladığı faydaları ele alacağız.

türden bağımsız programlama (generic programming)

Bu bölümde C++ dilinin türden bağımsız programlama (generic programming) araçları kapsamlı bir şekilde ve ileri düzeyde ele alacağız. Önce temel kursta öğrendiğimiz araçları hızlı bir şekilde tekrar edecek sonra ileri düzey araçları, yeni standartlarla gelen eklentileri ve bazı önemli teknikleri ve idiyomları öğreneceğiz. C++20 standartları ile gelen eklemeler de konu başlıklarımız arasında olacak

template terminology, function templates, class templates, variable templates, alias templates, member templates, template parameters, type parameters, non-type parameters, auto non-type parameters, template template parameters, function templates & overloading, explicit specialization, partial specialization, template instantiation, template arguments, template argument deduction, dependent & non-dependent names, templates & friendship, ctad , meta functions and standard type_traits library, static_assert declarations & templates, std::type_identity, tag dispatch, if constexpr (static if), variadic templates, sizeof… operator, pack expansion patterns, fold expressions, sfinae, std::enable_if, std::void_t, std::declval, C++20 additions

mükemmel gönderim (perfect forwarding)

Modern C++‘ın kazandırdığı en önemli araçlardan biri “perfect forwarding”. Bu bölümde “perfect forwarding” tüm yönleriyle ele alnacak.

forwarding (universal) references, forwarding reference vs R value reference, std::forward, auto && for perfect forwarding, decltype(auto) and perfect forwarding, perfect forwarding of return values, perfect forwarding in STL, typical mistakes & misconceptions, guidelines.

concepts (C++20)

concept’ler C++20 standardı ile dile eklenen en önemli araçlardan biri. Concept‘ler ile türden bağımsız programlama, daha kolay ve daha güvenli olarak gerçekleştirilebiliyor. Bu başlık altında concept‘lere yönelik özellikleri ve standart kütüphane öğelerini ayrıntılı olarak ele alacağız.

constraints, requires clauses, requires expressions, type requirements, compound requirements, nested requirements, concepts, type constraints and auto, standard concepts

olağan dışı durumların işlenmesi (advanced exception handling)

Bu başlık altında “exception handling” konusunda temel kursta ele almadığımız bazı ileri konuları inceleyecek (exception handling) konusunda daha derin bir bakış açısına sahip olacağız. exception handling konusunda bilmediğimiz hiçbir şey kalmayacak.

exception guarantees in details, noexcept specifier, noexcept operator, when to throw when to catch, what to throw what to catch, std::exception_ptr, std::nested_exception, std::rethrow_exception

lambda ifadeleri (lambda expressions C++11/14/17/20/23)

Modern C++’ın olmazsa olmaz araçlarından biri de lambda ifadeleri. Bu konu başlığı altında lambda ifadelerine ilişkin bilmediğimiz hiçbir şey kalmayacak. C++ dilinin her yeni standardıyla lambda ifadelerinin kapsamı genişledi, yeni yeni özellikler, araçlar eklendi. Önce temel düzeyde hızlı bir tekrar yapacak daha sonra ileri düzeyde bilgiler edineceğiz.

lambda expressions and type deductions, lambda expressions & constexpr, generalized lambda expressions, lambda init capture, lambda expressions & perfect forwarding, pack expansions in lambda expressions, lambda expressions & STL algorithms, recursive lambda, lambda expressions in member functions, lambda expressions for functional programming, lambda expressions in C++20/23, template parameter lists on lambdas (C++20), new lambda captures (C++20), lambda expressions in unevaluated context – C++20, lambda init capture pack expansions (C++20), default constructible and assignable stateless lambdas (C++20), lambda idioms.

spaceship operator (C++20)

C++ 20 ile eklenen önemli araçlardan biri. Artık bu operatör ile karşılaştrıma işlemleri çok daha kolay.

comparison categories, strong ordering, weak ordering, partial ordering, spaceship operator in STL.

std::format (C++20)

C++20 Standardı ile dile eklenen std::format kütüphanesini detaylı olarak öğreneceğiz. Artık formatlı çıkış işlemleri daha hızlı, daha esnek ve daha kolay.

std::format, td::format_to, std::format_to_n, std::formatted_size

C++ idioms and techniques

Bu bölümde üretimde sık kullanılan C++ idiyomlarını ve tekniklerini mercek altına alacağız. Bazı konu başlıklarımız şunlar olacak:

RAII, swap functions, copy & swap idiom, scope guards, strong types, tag dispatch, hidden friends, ADL + fallback, virtual constructor, virtual friend, factories, proxy, memory ownership, pimpl & fast pimpl, attorney – client, local buffer optimization, implementation class, non virtual interface (NVI), isimlendirilmiş parametre (named parameter), tür silme (type erasure), IIFE (immediatly invoked lambda expression), referans sayımı (reference counting), positive lambda, exception dispatcher, biased dağılımı (biased distribution), gather algorithm, slide algorithm, tail call optimization (TCO), strength reduction, instruction scheduling

derleyici optimizasyonları (compiler optimizations)

Bu bölümde tipik bir C++ derleyicisinin gerçekleştirdiği optimizasyon faaliyetleri üstünde duracağız.

dead code elimination, loop unrolling, loop inversion, constant folding, constant propagation, function inlining, register allocation, Common Subexpression Elimination (CSE), common subexpression elimination (CSE), loop-invariant dode motion, automatic vectorization, memory to register promotion, procedure integration, interprocedural analysis and optimization

std::ranges (C++20)

C++20 standardı ile dile eklenen std::ranges kütüphanesi standart kütüphanemizin en önemli öğelerinden biri haline geldi. STL’de değişti, yenilendi. STL2.0’ı öğreneceğiz.

coroutines (C++20)

C++20 Standardı ile dile eklenen ve C++23 Standardı ile yapılan eklemeler ile daha güçlü hale gelen coroutin‘leri detaylı olarak ele alacağız.

yeni kütüphane öğeleri (new library components)

Bu bölümde C++17, C++20, C++23 standartları ile dile eklenen önemli kütüphane öğelerine odaklanacağız.

std::string_view, std::optional, std::variant, std::any, file_system_library, std::span (C++20), std::expected(C++23), std::mdspan(C++23), std::print(C++23), std::flat_set (C++23), std::flat_map(C++23)

concurrency in C++

Bu bölümde Modern C++ ile dile eklenen yeni bellek modeli ve concurrency kütüphanesini detaylı olarak ele alacağız.

(std::thread, std::this_thread namespace, std::jthread (C++20), thread_local storage, std::async, shared objects & mutex classes, race condition & data race, std::lock_guard, std::unique_lock, std::scoped_lock, deadlocks, std::once_flag & std::call_once, std::future, std::promise, std::shared_future, std::packaged_task, std::condition_variable, std::atomic, thread pools, paralel STL algorithms)