L'avènement de C++11
- Les différentes normes C++98, C++03, C++11=, C++14, C++17, C++20.
- Les nouveautés de C++11 et les objectifs de cette norme. Le devenir de Boost, STL.
- La question de la compatibilité des codes anciens.
- La disponibilité des outils de développement (compilateurs, débogueurs, IDE...).
Travaux pratiques
Vérification de l'outillage à l'aide d'un code C++11 fourni.
Les améliorations du langage
- Les enum fortement typées.
- Le mot-clé auto et decltype pour simplifier le typage.
- La boucle basée sur un intervalle.
- Constexpr pour une évaluation à la compilation.
- Templates variadiques, concepts de C++20 soucoupe...
- Coroutines de C++20.
- Les modules de C++20.
Travaux pratiques
Mise en œuvre des améliorations.
Les modifications au niveau des classes
- La délégation de constructeurs, les contraintes liées à l'héritage.
- La nouvelle sémantique du déplacement et le constructeur par déplacement (move constructor).
- Les directives override, final =delete, =default.
- Notion de module C++20
Travaux pratiques
Création de classes.
La programmation fonctionnelle avec les expressions lambda
- Déclaration, typage, implémentation et utilisation.
- L'intérêt d'auto avec les lambda-expressions.
- La gestion des fermetures (closures), avec capture par valeur ou par référence des variables liées au contexte.
Travaux pratiques
Exercices de programmation fonctionnelle.
L'utilisation des threads
- Déclaration et exécution d'un thread. Attente de fin d'exécution avec join().
- La gestion des données locales à un thread.
- Récupérer un résultat avec future<> et async().
- Choisir parmi les différents verrous de la STL.
Travaux pratiques
Multithreader un code séquentiel et mesurer le gain en termes de temps d'exécution.
Autres nouveautés de la bibliothèque standard
- Ranges avec std ::view pour évaluations à la volée de C++20.
- La gestion du temps avec le namespace chrono.
- Le nouveau conteneur tuple.
- Conteneurs unordered_set, unordered_map à base de hachage.
- Formatage de string avec C++20.
Travaux pratiques
Mise en œuvre des nouveautés.
La gestion mémoire et les conteneurs
- Les smart pointers : shared_ptr, weak_ptr, unique_ptr. Usage conjoint avec la STL.
Travaux pratiques
Mise en œuvre de la gestion mémoire C++11.