Nowoczesne programowanie w C++
Cele szkolenia
Uczestnicy szkolenia poznają:
- nowe elementy języka C++, takie jak
nullptr
, mechanizmy dedukcjiauto
idecltype
, pętlę range-based for, silnie typizowane typy wyliczeniowe (scoped enums) oraz jednolitą składnię inicjalizacji - implementację semantyki przenoszenia dla klas i mechanizm perfect forwarding'u
- wyrażenia lambda i ich praktyczne zastosowanie
- mechanizmy bezpiecznego zarządzania pamięcią przy pomocy smart pointerów
- nowości w szablonach: variadic templates i fold expressions
- nowości w bibliotece standardowej, takie jak
std::tuple
,std::optional
istd::variant
- możliwości wywoływania funkcji i tworzenia struktur danych na etapie kompilacji
Plan szkolenia
Nowości w składni języka
- Nowe typy podstawowe w C++11/17
- Literały znakowe - raw strings
- Pusty wskaźnik nullptr
- Automatyczna dedukcja typów
- Mechanizm dedukcji auto
- Mechanizm dedukcji decltype
- Dedukcja typu zwracanego z funkcji
- Nowe typy wyliczeniowe - scoped enumerations
- Instrukcje if oraz switch z inicjalizatorami zmiennych
- Pętle for dla zakresów (range-based-for)
- Jednolita składnia inicjalizacji
- Listy inicjalizujące
- Statyczne składowe inline
- Nowe atrybuty:
[[nodiscard]]
,[[maybe_unsued]]
itp.
Nowości w klasach
- Specjalne funkcje składowe
- Domyślna inicjalizacja składowych niestatycznych
- Delegowanie i dziedziczenie konstruktorów
- Kontrola nadpisywania metod wirtualnych -
override
- Blokowanie dziedziczenia lub nadpisywania metod -
final
- Funkcje konwersji deklarowane jako
explicit
Semantyka przenoszenia
- lvalue vs. rvalue
- Referencje do rvalue -
T&&
- Implementacja semantyki przenoszenia (move semantics) w klasach
- Implementacja funkcji
std::move()
- Perfect forwarding i uniwersalne referencje
- Copy Elision i Return Value Optimisation (RVO)
noexcept
i optymalizacja wydajności
Wyrażenia lambda
- Obiekty wywoływalne w nowoczesnym C++ - callables
- Wyrażenia lambda i klasy domknięć
- Przechwytywanie zmiennych lokalnych w domknięciach
- Wykorzystanie lambd w algorytmach STL
- Przechowywanie lambd w zmiennych -
auto
vs.std::function
- Kolejki zadań
- Implementacja wywołań zwrotnych - callbacks
Zarządzanie pamięcią w nowoczesnym C++
- Idiom RAII (Resource Aquisition Is Initialization)
- Inteligentne wskaźniki
std::unique_ptr
std::shared_ptr
std::weak_ptr
- Dealokatory użytkownika
Programowanie na etapie kompilacji
- Wyrażenia stałe
constexpr
- Funkcje
constexpr
- Praktyczne wykorzystanie constexpr - tworzenie struktur danych na etapie kompilacji
constexpr if
Szablony
- Cechy typów - biblioteka Type Traits
- Szablony wariadyczne - variadic templates
- Fold expressions
- Class Template Argument Deduction - CTAD
Biblioteka standardowa
std::byte
- Tablice o stałym rozmiarze -
std::array
- Kontenery z haszowaniem
std::function
- Krotki -
std::tuple
- Zwracanie wielu wartości z funkcji – structured bindings w C++17
- Typowe przypadki użycia krotek – pisanie operatorów porównania dla typów użytkowników itp.
std::string_view
std::optional
- Obiekty dynamiczne -
std::any
- Typ wariantowy
std::variant
i mechanizm wizytacji
Wymagania
Opanowane podstawy programowania w języku C++
Czas trwania
5 dni po 8 godzin lekcyjnychWycena szkolenia zamkniętego
Szkolenie zamknięte w siedzibie Klienta.
Klient zapewnia salę szkoleniową i sprzęt.
Zapytaj o termin i cenę