C++11
C++11 est la deuxième version majeure de C++ et la mise à jour la plus importante depuis C++98. Un grand nombre de modifications ont été introduites à la fois pour normaliser les pratiques existantes et pour améliorer les abstractions disponibles pour les programmeurs C++.
Avant d'être finalement approuvé par l'ISO le 12 août 2011, le nom 'C++0x' était utilisé car il était prévu qu'il soit publié avant 2010. Il a fallu 8 ans entre C++03 et C++11, ce qui en fait le plus long intervalle entre deux versions jusqu'à présent. Depuis, actuellement, C++ est mis à jour tous les 3 ans régulièrement.
| Cette section est incomplète |
Les fonctionnalités suivantes ont été fusionnées dans C++11 :
- Depuis TR1 : tout TR1 sauf Fonctions spéciales.
- Depuis Boost : La bibliothèque de threads, exception_ptr, error_code et error_condition, améliorations des itérateurs (begin, end, next, prev)
- Depuis C : Fonctions de conversion Unicode de style C
Fonctionnalités du langage de base
- auto et decltype
- Fonctions par défaut et supprimées
- final et override
- Type de retour suffixé
- Références sur des rvalues
- Constructeurs de déplacement et Opérateurs d'affectation de déplacement
- Énumérations à portée définie
- constexpr et Types littéraux
- Initialisation par liste
- Constructeurs délégués et hérités
- Initialiseurs accolade-ou-égal
- nullptr
- long long
char16_tetchar32_t- Alias de types
- Modèles variadiques
- Unions généralisées (non triviales)
- POD généralisés (Types triviaux et Types à disposition standard)
- Littéraux de chaîne Unicode
- Littéraux définis par l'utilisateur
- Attributs
- Expressions lambda
- Spécificateur noexcept et opérateur noexcept
- alignof et alignas
- Modèle mémoire multithread
- Stockage local au thread
- Interface GC (supprimée en C++23)
- Plage for
for(basé sur la bibliothèque Boost) - static_assert (basé sur la bibliothèque Boost)
| Cette section est incomplète |
Fonctionnalités de la bibliothèque
En-têtes
- <array>
- <atomic>
- <cfenv>
- <chrono>
- <cinttypes>
- <condition_variable>
- <cstdint>
- <cuchar>
- <forward_list>
- <future>
- <initializer_list>
- <mutex>
- <random>
- <ratio>
- <regex>
- <scoped_allocator>
- <system_error>
- <thread>
- <tuple>
- <typeindex>
- <type_traits>
- <unordered_map>
- <unordered_set>
Fonctionnalités de la bibliothèque
- Bibliothèque de support de la concurrence
emplace()et autre utilisation des références sur des rvalues dans toutes les parties de la bibliothèque existante- std::unique_ptr
- std::move_iterator
- std::initializer_list
- Allocateurs avec état et à portée
- std::forward_list
- Bibliothèque chrono
- Bibliothèque ratio
- Nouveaux algorithmes :
- std::all_of, std::any_of, std::none_of,
- std::find_if_not,
- std::copy_if, std::copy_n,
- std::move, std::move_backward,
- std::random_shuffle, std::shuffle,
- std::is_partitioned, std::partition_copy, std::partition_point,
- std::is_sorted, std::is_sorted_until,
- std::is_heap, std::is_heap_until,
- std::minmax, std::minmax_element,
- std::is_permutation,
- std::iota,
- std::uninitialized_copy_n
- Facettes de conversion Unicode
- std::function
- std::exception_ptr
- std::error_code et std::error_condition
- Améliorations des itérateurs :
- std::begin
- std::end
- std::next
- std::prev
| Cette section est incomplète |
Rapports de défauts
Support des compilateurs
Fonctionnalités du langage C++11
| Fonctionnalité C++11 |
Document(s) |
GCC |
Clang |
MSVC |
Apple Clang |
EDG eccp |
Intel C++ |
Nvidia HPC C++ (ex PGI)* |
Nvidia nvcc |
Cray |
Embarcadero C++ Builder |
IBM Open XL C++ for AIX |
IBM Open XL C++ for z/OS |
IBM XL C++ |
Sun/Oracle C++ |
HP aCC |
Digital Mars C++ |
|
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Préprocesseur C99 | N1653 | 4.3 | Oui | 19.0 (2015)* (partiel)* 19.26* |
Oui | 4.1 | 11.1 | 2015 | 7.0 | 8.4 | Oui | 17.1.0 | 1.1.0 | 10.1 | 5.9 | A.06.25 | Oui | |
| static_assert (FTM)* | N1720 | 4.3 | 2.9 | 16.0* | Oui | 4.1 | 11.0 | 2015 | 7.0 | 8.4 | Oui | 17.1.0 | 1.1.0 | 11.1 | 5.13 | A.06.25 | 8.52 | |
| Crochets angulaires droits | N1757 | 4.3 | Oui | 14.0* | Oui | 4.1 | 11.0 | 2015 | 7.0 | 8.4 | Oui | 17.1.0 | 1.1.0 | 12.1 | 5.13 | |||
| Déclarations friend étendues | N1791 | 4.7 | 2.9 | 16.0* | Oui | 4.1 | 11.1 (partiel) 12.0 |
2015 | 7.0 | 8.4 | Oui | 17.1.0 | 1.1.0 | 11.1 | 5.13 | A.06.25 | ||
long long
|
N1811 | Oui | Oui | 14.0* | Oui | Oui | Oui | 2015 | 7.0 | 8.4 | Oui | 17.1.0 | 1.1.0 | Oui | Oui | Oui | Oui | |
| auto | N1984 | 4.4 | Oui | 16.0* | Oui | 3.9 | 11.0 (partiel)* 12.0 |
2015 | 7.0 | 8.4 | Oui | 17.1.0 | 1.1.0 | 11.1 | 5.13 | A.06.25 | ||
| Constructeurs délégués (FTM)* | N1986 | 4.7 | 3.0 | 18.0* | Oui | 4.7 | 14.0 | 2015 | 7.0 | 8.4 | Oui | 17.1.0 | 1.1.0 | 11.1 | 5.13 | A.06.28 | ||
extern template
|
N1987 | 3.3 | Oui | 12.0* | Oui | 3.9 | 9.0 | 2015 | 7.0 | 8.4 | Oui | 17.1.0 | 1.1.0 | 11.1 | 5.13 | A.06.25 | ||
| constexpr (FTM)* | N2235 | 4.6 | 3.1 | 19.0 (2015)* | Oui | 4.6 | 13.0 (partiel) 14.0 |
2015 | 7.0 | 8.4 | Oui | 17.1.0 | 1.1.0 | 12.1 (partiel) 13.1 |
5.13 | A.06.28 | ||
char16_t et char32_t (FTM)*
|
N2249 | 4.4 | 2.9 | 19.0 (2015)* | Oui | 4.4 | 12.1 (partiel)* 14.0 |
2015 | 7.0 | 8.4 | Oui | 17.1.0 | 1.1.0 | 13.1.1* | 5.13 | A.06.27 | 8.52 | |
| Prise en charge du compilateur pour les traits de type. N2255* | N2255 N2984 N3142 |
4.3 (partiel)* 4.8 (partiel)* 5 |
3.0 | 14.0* (partiel)* 19.0 (2015)* |
Oui | 4.0 | 10.0 | 2015 | 8.4 | Oui | 17.1.0 | 1.1.0 | 13.1.3 | 5.13 | 6.16 | |||
| Alias de modèles (FTM)* | N2258 | 4.7 | 3.0 | 18.0* | Oui | 4.2 | 12.1 | 2015 | 7.0 | 8.4 | Oui | 17.1.0 | 1.1.0 | 13.1.1* | 5.13 | A.06.27 | ||
| alignas | N2341 | 4.8 | 3.0 | 19.0 (2015)* | Oui | 4.8 | 15.0 | 2015 | 7.0 | 8.6 | Oui | 17.1.0 | 1.1.0 | 13.1.2* | 5.13 | |||
| alignof | N2341 | 4.5 | 2.9 | 19.0 (2015)* | Oui | 4.8 | 15.0 | 2015 | 7.0 | 8.4 | Oui | 17.1.0 | 1.1.0 | 13.1.2* | 5.13 | |||
| Fonctions par défaut et supprimées | N2346 | 4.4 | 3.0 | 18.0* | Oui | 4.1 | 12.0 | 2015 | 7.0 | 8.4 | Oui | 17.1.0 | 1.1.0 | 13.1 | 5.13 | A.06.25 | ||
Énumérations enum
|
fortement typées | N2347 | 4.4 | 2.9
16.0* (partiel) |
17.0* | Oui | 4.0 | 13.0 | 2015 | 7.0 | 8.4 | Oui | 17.1.0 | 1.1.0 | 12.1 | 5.13 | ||
| A.06.25 | Opérations atomiques | N2427 | 4.4 | 3.1 | 17.0* | Oui | Oui | 13.0 | 2015 | 8.4 | Oui | 17.1.0 | 1.1.0 | 13.1.2* | ||||
| 5.14 | nullptr | N2431 | 4.6 | 2.9 | 16.0* | Oui | 4.2 | 12.1 | 2015 | 7.0 | 8.4 | Oui | 17.1.0 | 1.1.0 | 13.1 | 5.13 | A.06.27 | |
| 8.52 Opérateurs de | conversion explicites | N2437 | 4.5 | 3.0 | 18.0* | Oui | 4.4 | 13.0 | 2015 | 7.0 | 8.4 | Oui | 17.1.0 | 1.1.0 | 12.1 | 5.13 | ||
| A.06.27 Qualificateurs de référence (FTM) | * | N2439 | 4.8.1 | 2.9 | 19.0 (2015)* | Oui | 4.7 | 14.0 | 2015 | 7.0 | 8.4 | Oui | 17.1.0 | 1.1.0 | 13.1.2* | 5.13 | ||
| A.06.28 Littéraux de chaîne Unicode (FTM) | * | N2442 | 4.4 | 3.0 | 19.0 (2015)* | Oui | 4.7 | 11.0* | 2015 | 7.0 | 8.4 | Oui | 17.1.0 | 1.1.0
10.1* |
13.1.1* | 5.7 | A.06.28 | |
| 8.52 Littéraux de chaîne bruts (FTM) | * | N2442 | 4.5 | Oui | 18.0* | Oui | 4.7 | 14.0 | 2015 | 7.0 | 8.4 | Oui | 17.1.0 | 1.1.0 | 13.1.1, sauf AIX xlC 13.1.3* | 5.13 | A.06.28 | |
| 8.52 | Espaces de noms en ligne | N2535 | 4.4 | 2.9 | 19.0 (2015)* | Oui | 4.5 | 14.0 | 2015 | 7.0 | 8.4 | Oui | 17.1.0 | 1.1.0 | 11.1 | 5.13 | ||
| A.06.28 Constructeurs hérités (FTM) | * | N2540 | 4.8 | 3.3 | 19.0 (2015)* | Oui | 4.8 | 15.0 | 2015 | 7.0 | 8.4 | Oui | 17.1.0 | 1.1.0 | 13.1.1* | |||
| 5.13 | Types de retour suffixés | N2541 | 4.4 | 2.9 | 16.0* | Oui | 4.1 | 12.0 | 2015 | 7.0 | 8.4 | Oui | 17.1.0 | 1.1.0 | 12.1 | 5.13 | ||
| A.06.27 Unions non restreintes | N2544 | 4.6 | 3.0 | 19.0 (2015)* | Oui | 4.6 | 14.0* | 2015 | 7.0 | 8.4 | Oui | 17.1.0 | 1.1.0 | 13.1.2* | 5.13 | A.06.28 | ||
| Modèles variadiques (FTM)* | N2242 N2555 |
4.3 (partiel)* 4.4 |
2.9 | 18.0* | Oui | 4.3 (partiel)* 4.3 |
12.1 | 2015 | 7.0 | 8.4 | Oui | 17.1.0 | 1.1.0 | 11.1 (partiel)* | 5.13 | A.06.27 | ||
| Expression SFINAE | N2634 | 4.4 | 2.9 | 19.14* | Oui | 4.2 | 12.1 | 2015 | 7.0 | 8.4 | Oui | 17.1.0 | 1.1.0 | |||||
| Types locaux et sans nom comme paramètres de modèle | N2657 | 4.5 | 2.9 | 16.0* | Oui | 4.2 | 12.0 | 2015 | 7.0 | 8.4 | Oui | 17.1.0 | 1.1.0 | 13.1.2* | 5.13 | A.06.27 | ||
| Stockage local au thread | N2659 | 4.4 (partiel) 4.8 |
3.3* | 16.0* (partiel) 19.0 (2015)* |
Oui | 4.8 | 11.1 (partiel) 15.0* |
2015 | 8.4 | Oui | 17.1.0 | 1.1.0 | 10.1 (partiel)* 13.1.2 (partiel)* |
5.9 (partiel) | 8.52 (partiel) | |||
| Initialisation et destruction dynamiques avec concurrence (statiques magiques) (FTM)* | N2660 | 4.3 | 2.9 | 19.0 (2015)* | Oui | Oui | 11.1* | 2015 | 8.4 | Oui | 17.1.0 | 1.1.0 | 13.1.2* | 5.13 | A.06.25 | |||
| Détection de fuites basée sur l'accessibilité et collecte des ordures | N2670 | |||||||||||||||||
| Listes d'initialisation (FTM)* | N2672 | 4.4 | 3.1 | 18.0* | Oui | 4.5 | 13.0 (partiel) 14.0 |
2015 | 7.0 | 8.4 | Oui | 17.1.0 | 1.1.0 | 13.1.2* | 5.13 | A.06.28 | ||
| Initialiseurs de données membres non statiques (FTM)* | N2756 | 4.7 | 3.0 | 18.0* | Oui | 4.6 | 14.0 | 2015 | 7.0 | 8.4 | Oui | 17.1.0 | 1.1.0 | 13.1.2* | 5.13 | A.06.28 | ||
Attributs, [[noreturn]] (FTM)*
|
N2761 | 4.8 | 3.3 | 19.0 (2015)* | Oui | 4.2 | 12.1 | 2015 | 7.0 | 8.4 | Oui | 17.1.0 | 1.1.0 | 13.1.1* | 5.13 | A.06.27 | ||
[[carries_dependency]]
|
N2556 N2643 |
3.3* | 17.1.0* | |||||||||||||||
Déclarations enumanticipées (opaques)
|
N2764 | 4.6 | 3.1 | 17.0* | Oui | 4.5 | 11.1 (partiel) 14.0 |
2015 | 7.0 | 8.4 | Oui | 17.1.0 | 1.1.0 | 12.1 | 5.13 | |||
| Littéraux définis par l'utilisateur (FTM)* | N2765 | 4.7 | 3.1 | 19.0 (2015)* | Oui | 4.8 | 15.0 | 2015 | 7.0 | 8.4 | Oui | 17.1.0 | 1.1.0 | 13.1.2* | 5.14 | |||
| Références sur des rvalues (FTM)* | N2118 N2844 CWG1138 |
4.3 (partiel)* 4.5 |
2.9 | 16.0* (partiel)* 17.0* |
Oui | 4.5 | 11.1 (partiel)* 12.0 (partiel)* 14.0 |
2015 | 7.0* | 8.4 | Oui | 17.1.0 | 1.1.0 | 12.1 | 5.13 | A.06.25 | ||
| Expressions lambda (FTM)* | N2550 N2658 N2927 |
4.5 | 3.1 | 16.0* (partiel)* 17.0* |
Oui | 4.1 | 12.0 | 2015 | 7.0 | 8.4 | Oui | 17.1.0 | 1.1.0 | 13.1.2* | 5.13 | A.06.25 | ||
| Boucle for par plage (FTM)* | N2930 N3271 |
4.6 | 3.0 | 17.0* | Oui | 4.5 | 13.0 | 2015 | 7.0 | 8.4 | Oui | 17.1.0 | 1.1.0 | 13.1.2* | 5.13 | A.06.28 | ||
| noexcept | N3050 | 4.6 | 3.0 | 19.0 (2015)* | Oui | 4.5 | 14.0 | 2015 | 7.0 | 8.4 | Oui | 17.1.0 | 1.1.0 | 13.1.1* | 5.13 | A.06.28 | ||
| Fonctions membres spéciales de déplacement par défaut | N3053 | 4.6 | 3.0 | 19.0 (2015)* | Oui | 4.5 | 14.0 | 2015 | 7.0 | 8.4 | Oui | 17.1.0 | 1.1.0 | 5.13 | A.06.25 | |||
| override et final | N2928 N3206 N3272 |
4.7 | 2.9 | 14.0* (partiel) 17.0* |
Oui | 4.8 | 12.0 (partiel)* 14.0 |
2015 | 7.0 | 8.4 | Oui | 17.1.0 | 1.1.0 | 13.1.1* | 5.13 | |||
| decltype (FTM)* | N2343 N3276 |
4.3 (partiel)* 4.8.1 |
2.9 | 16.0* (partiel)* 17.0* |
Oui | 4.2 (partiel)* 4.8 |
11.0 (partiel)* 12.0 |
2015 | 7.0 | 8.4 | Oui | 17.1.0 | 1.1.0 | 11.1 (partiel)* | 5.13 | A.06.25 | 8.52 (partiel)* | |
| Fonctionnalité C++11 |
Document(s) |
GCC |
Clang |
MSVC |
Apple Clang |
EDG eccp |
Intel C++ |
Nvidia HPC C++ (ex PGI)* |
Nvidia nvcc |
Cray |
Embarcadero C++ Builder |
IBM Open XL C++ for AIX |
IBM Open XL C++ for z/OS |
IBM XL C++ |
Sun/Oracle C++ |
HP aCC |
Digital Mars C++ |
Fonctionnalités de la bibliothèque C++11
| Fonctionnalité C++11 |
Document(s) |
GCC libstdc++ |
Clang libc++ |
MSVC STL |
Apple Clang* |
IBM Open XL C/C++ for AIX* |
Sun/Oracle C++* |
Embarcadero C++ Builder* |
|
|---|---|---|---|---|---|---|---|---|---|
| Bibliothèque des expressions régulières | N1429 | 4.9 | 2.8 | Oui | Oui | 17.1.0 | |||
| Traits de type. N1836* | N1836 N2240 N2244 N2255 N2342 N2984 N3142 |
4.3 (partiel)* 4.8 (partiel)* 5 |
3.0 | 14.0* (partiel)* 19.0 (2015)* |
Oui | 17.1.0 | 5.13 | Oui | |
Fonctions membres cbegin, cend, crbegin, et crend des conteneurs
|
N1913 LWG1192 |
4.3 (partiel)* 4.5 |
Oui* | 16.0* | Oui* | 17.1.0 | |||
| Détection de fuites basée sur l'accessibilité et collecte des ordures (support de la bibliothèque) N2670 | 6 | (sans opération)* 3.4 |
(sans opération)* 19.0 (2015)* |
(sans opération)* Oui |
(sans opération)* 17.1.0 |
Manipulateurs I/O monétaires, temporels et hexfloat | |||
| N2071 | N2072 5 |
3.8 | 19.0 (2015)* | Oui | 17.1.0 | 5.15 | Interdiction du | ||
| COW (copie sur écriture)std::basic_string N2668 | 5 | Oui | Oui | Oui | 17.1.0 | Oui | Fonctionnalité C++11 | ||
| Document(s) |
GCC libstdc++ |
Clang libc++ |
MSVC STL |
Apple Clang* |
IBM Open XL C/C++ for AIX* |
Sun/Oracle C++* |
Embarcadero C++ Builder* |
* |
- survolez une cellule marquée d'une étoile * pour voir des notes contextuelles supplémentaires.
DRnn - le nombre nn après "DR" indique la révision C++ cible à laquelle le rapport de défaut s'applique, par exemple DR20 → C++20.
Liens externes
| 1. | C++11 - Wikipédia |
| 2. | Exemples C++11 fonctionnels |