Nowoczesne programowanie w C++

Cele szkolenia

Uczestnicy szkolenia poznają:

  • nowe elementy języka C++, takie jak nullptr, mechanizmy dedukcji auto i decltype, 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 i std::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 lekcyjnych
Wycena szkolenia zamkniętego

Szkolenie zamknięte w siedzibie Klienta.

Klient zapewnia salę szkoleniową i sprzęt.

Zapytaj o termin i cenę
Wycena szkolenia zdalnego

Szkolenie live online. Warsztaty z trenerem.

Zapytaj o termin i cenę
Terminy szkoleń otwartych

Brak terminu?

Zgłoś zainteresowanie szkoleniem