-
Filière :
Développement logiciel
-
Sous-filière :
Autres technologies
-
Référence
PR-CPP20
-
Durée
4 jours (28 h)
-
Prix par personne HT
Sur demande
Description
A l’instar de la version 11, la mouture 20 de C++ est majeure en raison des nombreuses améliorations significatives apportées tant au cœur du langage qu’à l’imposante librairie qui l’accompagne. De façon plus prononcée qu’auparavant, C++20 met l’accent sur l’approche « Modern Design » permettant de concevoir des systèmes plus robustes, performants et évolutifs.
Objectifs pédagogiques
- Maîtriser les nouveautés des versions récentes de C++
Public cible
- Développeurs C
Pré-requis
Pratique professionnelle de C++
Modalités d’évaluation
L’évaluation des acquis se fait tout au long de la session au travers d’ateliers de mise en pratique des notions et concepts abordés pendant la formation.
Programme de la formation
Nouveautés fondamentales du Core Language
- nullptr_t et le littéral nullptr
- les nouveaux types, littéraux et séparateurs
- variables templates
- Initialisation uniforme
- Initialisation de tableaux et collections
- Parcours unifié des tableaux et conteneurs
- Listes d’initialisation avec initializer_list<T>
- La boucle « range based » for
- Énumérations fortement typées
- Littéraux personnalisés
- Init-statements
- Types normalisés et variantes (uint_8, uint64_t, …)
- L’opérateur sizeof (Class ::membre)
- Contrôle de l’alignement mémoire
- Inférence de types et de signatures avec auto
- C++14 et déduction étendue
- L’opérateur decltype
- Structured bindings
- Les nouveaux spécificateurs de classe (override, default, delete, final)
- Constructeur délégué
- Constructeur hérité
- Initialisation de membres
- Constructeur explicite multi-paramétré
- Abraham’s Exception safety guarantees et la clause noexcept
- Données inline
- Alias et using
- Expressions constantes avec constexpr
- Attributs
- L’opérateur de comparaison « Three Way » <=>
- Comparaison sécurisée des entiers
- Paramètres nommés pour la construction des structures
- Améliorations apportées aux fonctions génériques
- Améliorations apportées aux lambda-expressions
- Les nouveaux attributs de la version 20
- Les modules :
- Unités d’interface et d’implémentation
- Sous modules et partitions
- Module linkage
Nouveautés de la librairie standard
- Les nouveaux itérateurs cbegin
- Les tableaux à taille fixe avec std ::array
- La classe std ::string_view
- La class std ::span
- Nouveautés de la class std ::string
- std ::variant / std ::visit et std ::any
- std ::optional
- Les nouvelles collections associatives : unordered_map/set
- Singly-Linked Lists
- Le conteneur tuple
- Adaptateurs d’itérateurs, stream itérateurs
- Les nouveaux algorithmes ensemblistes
- Gestion du temps, l’espace de nom chrono
- Générateurs / distributions de nombre aléatoires
- Expression régulières avec Regex
- La librairie Ranges et les vues
- Les adaptateurs de vues
- L’opérateur pipe
- Les nouveaux algorithmes sur vues
- Sorties formattées avec std ::format et les placeholders
- Formats prédéfinis et personnalisész
Robustesse – encapsulation – lookup
- Constance bitwise et constance logique
- Mutable
- Mutable et C++11
- Friendship
- Encapsulation (classes dans classes, classes dans fonctions, ..)
- Imbrication et généricité
- L’idiome static constructor
- Composition et gestions de version avec l’encapsulation des espaces de noms
- Espaces de noms inline
- Lookup, héritage et surcharge, la clause using
- ADL, argument dependant lookup
- ADL et STL
- Les spécificateurs consteval et constinit
- Constructeurs constexpr des conteneurs
Move semantics
- Copie versus déplacement
- Value et RValue reference
- La fonction move
- Move constructor et move assignement operator
- Complétude étendue des classes
- Héritage et move constructor / op=
- R-value reference et STL
- STL C++11 et swap / move
- Signature reference qualifiers
- Mauvaises pratiques
- Copy elision et Guaranted RVO
Gestion des ressources
- Resource Acquisition Is Initialization (RAII)
- L’opérateur -> avec ou sans généricité
- Propriété et transfert de responsabilité
- La classe unique_ptr
- Unique_ptr et tableaux dynamiques
- Comptage de références avec la classe shared_ptr
- Custom deleter
- Les fonctions make_unique (C++14) et make_shared
- La classe weak_ptr et le référencement circulaire
Programmation fonctionnelle
- Problématique de l’abonnement
- Pointeur de function / méthode
- Pointeur vers membre statique
- Les classe function et mem_fn
- Binding, placeholders
- Adaptateurs de références
Utilisation avancée de la généricité
- Typage multiple
- Inférence des types avec decltype
- Paramétrage / spécialisation des méthodes
- Perfect forwarding avec std::forward<T>
- Références universelles et collapsing
- Héritage / containment et généricité
- Méta-programmation
- L’idiome CRTP Curiously Recursive Template Pattern
- Typologie C++ et classes de traits
- Assertions statiques avec static_assert
- Extended friend declaration
- Les variadic templates, pattern matching et héritage multiple
- SFINAE Substitution Failure Is Not An Error
- Compile switching avec std::enable_if
- constepr if
- Les concepts
- Mise en œuvre de contraiontes avec requires
- Concepts prédéfinis de la librairie standard
- Concepts personnalisés
Multithreading et concurrence
- Principes
- Démarrage et détachement d’un thread
- Threads et gestion des exceptions
- La classe std ::call_once
- L’espace de noms this_thread
- Futures / promises et packaged_task
- Programmation asynchrone avec async
- Future et exceptions
- Politiques de démarrage
- Comparaison thread versus future
- Partage de ressources et mécanismes de synchronisation
- Mutexes et données atomiques
- Unique-lock et lock_guard
- La classe std::jthread
- Nouveautés de la librairie atomic (atomic_ref, atomic_flag,…)
- Synchronisation avec les sémaphores
- Les mécanismes latches et barriers
- Interruption coopérative
- Flux de sortie synchronisés
Les coroutines
- Buts
- Spécification du comportement avec un « awaiter »
- Les mots-clés co_await / co_return / co_yield
- Cycle de vie d’une coroutine
- Mise en suspens et redémarrage
Programme mis à jour le