C++14
Depuis fr.cppreference.net
< cpp
Le C++14 est une version mineure après la version majeure C++11, comportant principalement des améliorations mineures et des corrections de défauts. Son approbation a été annoncée le 18 août 2014. Il a été publié le 15 décembre 2014.
Avant son approbation, C++1y est parfois utilisé pour indiquer sa sortie dans les années 2010.
| Cette section est incomplète |
Nouvelles fonctionnalités du langage
- modèles de variables
- lambdas génériques
- capture d'initialisation de lambda
- élision new/delete
- restrictions assouplies sur les fonctions constexpr
- littéraux binaires
- séparateurs de chiffres
- déduction du type de retour pour les fonctions
- classes agrégats avec initialiseurs de membres non statiques par défaut.
Nouvelles fonctionnalités de la bibliothèque
- std::make_unique
- std::shared_timed_mutex et std::shared_lock
- std::integer_sequence
- std::exchange
- std::quoted
- et de nombreuses petites améliorations des fonctionnalités existantes de la bibliothèque, comme
- surcharges à deux plages pour certains algorithmes
- versions d'alias de type pour les traits de type
- littéraux définis par l'utilisateur pour basic_string, duration et complex
- etc.
| Cette section est incomplète |
Rapports de défauts
Support du compilateur
Fonctionnalités principales du langage C++14
| Fonctionnalité C++14 |
Proposition(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++ |
|
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Révision du libellé pour les conversions contextuelles | N3323 | 4.9 | 3.4 | 18.0* | Yes | 4.9 | 16.0 | 16.1 | 9.0 | 8.6 | 10.3 | 17.1.0 | 1.1.0 | 13.1.2* | 5.15 | |
| Littéraux binaires (FTM)* | N3472 | 4.3* 4.9 |
2.9 | 19.0 (2015)* | Yes | 4.10 | 11.0 | 2015 | 9.0 | 8.6 | 10.3 | 17.1.0 | 1.1.0 | 13.1.2* | 5.14 | |
| decltype(auto), Déduction du type de retour pour les fonctions normales (FTM)* (FTM)* | N3638 | 4.8 (partiel)* 4.9 |
3.3 (partiel)* 3.4 |
19.0 (2015)* | Yes | 4.9 | 15.0 | 16.1 | 9.0 | 8.6 | 10.3 | 17.1.0 | 1.1.0 | 13.1.2* | 5.15 | |
| Captures de lambda initialisées/généralisées (init-capture) (FTM)* | N3648 | 4.5 (partiel) 4.9 |
3.4 | 19.0 (2015)* | Yes | 4.10 | 15.0 | 16.1 | 9.0 | 8.6 | 10.3 | 17.1.0 | 1.1.0 | 16.1.1* | 5.15 | |
| Expressions lambda génériques (FTM)* | N3649 | 4.9 | 3.4 | 19.0 (2015)* | Yes | 4.10 | 16.0 | 16.1 | 9.0 | 8.6 | 10.3 | 17.1.0 | 1.1.0 | 13.1.2* | 5.15 | |
| Modèles de variables (FTM)* | N3651 | 5 | 3.4 | 19.0 (Mise à jour 2)* | Yes | 4.11 | 17.0 | 17.4 | 9.0 | 8.6 | 10.3 | 17.1.0 | 1.1.0 | 13.1.2* | 5.15 | |
constexpr étenduconstexpr (FTM)*
|
N3652 | 5 | 3.4 | 19.10* | Yes | 4.11 | 17.0 | 17.4 | 9.0 | 8.6 | 10.3 | 17.1.0 | 1.1.0 | 13.1.2* | 5.15 | |
| Agrégats avec initialiseurs de membres par défaut (FTM)* | N3653 | 5 | 3.3 | 19.10* | Yes | 4.9 | 16.0 | 16.1 | 9.0 | 8.6 | 10.3 | 17.1.0 | 1.1.0 | 16.1.1* | 5.14 | |
| Omettre/étendre les allocations mémoire | N3664 | N/A | 3.4 | N/A | Yes | N/A | N/A | 17.4 | N/A | 8.6 | 10.3 | 17.1.0 | 1.1.0 | N/A | N/A | |
[[deprecated]]Attribut [[deprecated]] |
N3760 | 4.9 | 3.4 | 19.0 (2015)* | Yes | 4.9 |
15.0* | 16.0
16.1 | 9.0 | 8.6 | 10.3 | 17.1.0 | 1.1.0 | 13.1.2* | 5.14 | |
| Désallocation dimensionnée (FTM)* | N3778 | 5 | 3.4 | 19.0 (2015)* | Yes | 4.10.1 | 17.0 | 16.1 | 8.6 | 10.3 | 17.1.0 | 1.1.0 | 16.1.1* | 5.14 | ||
| Guillemet simple comme séparateur de chiffres | N3781 | 4.9 | 3.4 | 19.0 (2015)* | Yes | 4.10 | 16.0 | 2015 | 9.0 | 8.6 | 10.3 | 17.1.0 | 1.1.0 | 13.1.2* | 5.14 | |
|
Fonctionnalité C++14 |
Proposition(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++ |
Fonctionnalités de la bibliothèque C++14
| Fonctionnalité C++14 |
Proposition(s) |
GCC libstdc++ |
Clang libc++ |
MSVC STL |
Apple Clang* |
IBM Open XL C/C++ for AIX* |
Sun/Oracle C++* |
Embarcadero C++ Builder* |
|
|---|---|---|---|---|---|---|---|---|---|
constexprLittéraux définis par l'utilisateur pour <complex>
|
N3302 | 5 | 3.4 | 19.0 (2015)* | Oui | 17.1.0 | 5.15 | 10.3 | |
| Objets fonctions opérateurs transparents (FTM)* | N3421 | 4.9 | 3.4 | 18.0* | Oui | 17.1.0 | 5.15 | 10.3 | |
| std::result_of et SFINAE (FTM)* | N3462 | 5 | Oui | 19.0 (Mise à jour 2)* | Oui | 17.1.0 | 5.15 | 10.3 | |
constexprLittéraux définis par l'utilisateur pour <chrono>
|
N3469 | 5 | 3.4 | 19.0 (2015)* | Oui | 17.1.0 | 5.15 | 10.3 | |
constexprconstexpr pour <array>
|
N3470 | 5 | 3.4 | 19.0 (2015)* | Oui | 17.1.0 | 5.15 | 10.3 | |
constexprconstexpr pour <initializer_list>, <utility> et <tuple>
|
N3471 | 5 | 3.4 | 19.0 (2015)* | Oui | 17.1.0 | 5.15 | 10.3 | |
| std::integral_constant amélioré (FTM)* | N3545 | 5 | 3.4 | 19.0 (2015)* | Oui | 17.1.0 | 5.15 | 10.3 | |
| Littéraux définis par l'utilisateur pour <chrono> et <string> (FTM)* (FTM)* | N3642 | 5 | 3.4 | 19.0 (2015)* | Oui | 17.1.0 | 5.15 | 10.3 | |
| Itérateurs avant nuls (FTM)* | N3644 | 5 (partiel) 10 |
3.4 | 19.0 (2015)* | Oui | 17.1.0 | 5.15 | 10.3 | |
| std::quoted (FTM)* | N3654 | 5 | 3.4 | 19.0 (2015)* | Oui | 17.1.0 | 5.15 | 10.3 | |
| std::make_unique (FTM)* | N3656 | 4.9 | 3.4 | 18.0* | Oui | 17.1.0 | 5.15 | 10.3 | |
| Recherche associative hétérogène (FTM)* | N3657 | 5 | 3.4 | 19.0 (2015)* | Oui | 17.1.0 | 5.15 | 10.3 | |
| std::integer_sequence (FTM)* | N3658 | 5 | 3.4 | 19.0 (2015)* | Oui | 17.1.0 | 5.15 | 10.3 | |
| std::shared_timed_mutex | N3659 | 5 | 3.4 | 19.0 (2015)* | Oui | 17.1.0 | 5.15 | 10.3 | |
| std::exchange (FTM)* | N3668 | 5 | 3.4 | 19.0 (2015)* | Oui | 17.1.0 | 5.15 | 10.3 | |
Correction des fonctions membres constexpr sans const
|
N3669 | 5 | 3.4 | 19.0 (2015)* | Oui | 17.1.0 | 5.15 | 10.3 | |
| Accès aux tuples par type : std::get<T>() (FTM)* | N3670 | 5 | 3.4 | 19.0 (2015)* | Oui | 17.1.0 | 5.15 | 10.3 | |
| Dual-Range std::equal, std::is_permutation, std::mismatch (FTM)* | N3671 | 5 | 3.4 | 19.0 (2015)* | Oui | 17.1.0 | 5.15 | 10.3 | |
| Modèles d'alias pour les traits de transformation (FTM)* | N3655 | 4.9 | 3.4 | 18.0* | Oui | ||||
Littéraux définis par l'utilisateur pour std::complex basic_string (FTM)* |
N3779 | 4.9 | 3.4 | 19.0 (2015)* | Oui | ||||
| DR11 : std::is_null_pointer (FTM)* | LWG2247 | 4.9 | 3.4 | 19.0 (2015)* | |||||
| std::is_final (FTM)* | LWG2112 | 5 | 3.4 | 19.0 (2015)* | |||||
| std::make_reverse_iterator (FTM)* | LWG2285 | 5 | 3.4 | 19.0 (2015)* | |||||
| std::shared_timed_mutex (FTM)* | N3891 | 4.9 | 3.5 | 19.0 (2015)* | Oui | ||||
| std::tuple_element_t (FTM)* | N3887 | 4.10 | 3.5 | 19.0 (2015)* | Oui | ||||
| Fonctionnalité C++14 |
Proposition(s) |
GCC libstdc++ | Clang libc++
| MSVC STL | Apple Clang* | 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++14 - Wikipédia |
| 2. | Exemples C++14 fonctionnels |