103 votes

C++14 ajoute-t-il de nouveaux mots-clés au C++ ?

Le comité de normalisation du C++ a tendance à éviter d'ajouter de nouveaux mots-clés au langage, mais ce n'est pas le cas avec C++11. Quelques exemples :

constexpr
decltype
thread_local
auto // New usage
noexcept
nullptr
static_assert
alignof
alignas

Y a-t-il de nouveaux mots-clés introduits avec C++14 ?

135voto

T.C. Points 22510

Tableau 4 (Mots-clés) dans N3936 (C++14) :

alignas           continue          friend            register          true
alignof           decltype          goto              reinterpret_cast  try
asm               default           if                return            typedef
auto              delete            inline            short             typeid
bool              do                int               signed            typename
break             double            long              sizeof            union
case              dynamic_cast      mutable           static            unsigned
catch             else              namespace         static_assert     using
char              enum              new               static_cast       virtual
char16_t          explicit          noexcept          struct            void
char32_t          export            nullptr           switch            volatile
class             extern            operator          template          wchar_t
const             false             private           this              while
constexpr         float             protected         thread_local
const_cast        for               public            throw

Tableau 4 dans N3337 (C++11) :

alignas           continue          friend            register          true
alignof           decltype          goto              reinterpret_cast  try
asm               default           if                return            typedef
auto              delete            inline            short             typeid
bool              do                int               signed            typename
break             double            long              sizeof            union
case              dynamic_cast      mutable           static            unsigned
catch             else              namespace         static_assert     using
char              enum              new               static_cast       virtual
char16_t          explicit          noexcept          struct            void
char32_t          export            nullptr           switch            volatile
class             extern            operator          template          wchar_t
const             false             private           this              while
constexpr         float             protected         thread_local
const_cast        for               public            throw

...ce qui est une façon très longue de dire "non".

( override et final sont des "identifiants ayant une signification particulière" et sont énumérés dans le tableau 3 ; and etc. sont des "représentations alternatives... pour certains opérateurs et ponctuateurs" et sont listés dans le tableau 5. Aucun de ces tableaux n'a changé entre C++11 et C++14).

85voto

Je publie cette réponse dans le but de donner des outils pour trouver des réponses à des questions similaires.

Le projet de norme est actuellement conservé dans un dépôt GitHub public. Cela signifie que vous pouvez poser cette question à GitHub lui-même !

La table des mots-clés se trouve dans le fichier source/lex.tex . Si vous faites un reproche à ce sujet, nous pouvons trouver que le dernière modification du tableau des mots-clés a eu lieu en août 2011 (il s'agit en fait du premier commit : ce tableau n'a pas changé depuis que le dépôt a été mis en ligne, au moment où C++11 était en cours de finalisation).

Nous pouvons également demander à GitHub de comparer les deux projets qui ont été envoyés au vote pour les deux versions de la norme : N3337 et N3936. A différence entre ces deux montre que les changements apportés à lex.tex n'a rien changé dans la table des mots-clés.

33voto

Jack Aidley Points 3993

Aucun nouveau mot-clé ne sera ajouté avec C++14. Cela n'est pas surprenant, car C++14 est conçu comme une petite mise à niveau de C++11, principalement destinée à corriger les bogues et à apporter de petites améliorations à faible impact. Le prochain changement majeur sera probablement C++17, où je m'attendrais à ce que de nouveaux mots-clés soient à nouveau ajoutés.

Le comité des standards C++ a tendance à éviter d'ajouter de nouveaux mots-clés au langage, mais ce ne fut pas le cas avec C++11.

Je pense que cela vaut la peine de considérer pourquoi le comité évite d'ajouter de nouveaux mots-clés (et par coïncidence, pourquoi vous avez tort d'inclure auto sur votre liste). Le principal problème avec les nouveaux mots-clés est qu'en C++, vous ne pouvez pas utiliser un mot-clé comme identifiant, ce qui signifie que l'ajout d'un nouveau mot-clé casse le code existant. Réutilisation de auto n'enfreint donc pas leur règle car aucun code existant ne peut utiliser auto en tant qu'identifiant de toute façon .

Pour accepter un nouveau mot-clé, il faut donc une justification qui l'emporte sur le coût d'un conflit potentiel avec le code existant et sur l'impossibilité d'implémenter la même chose sans un nouveau mot-clé. Dans le cas de C++11, le comité a accepté quelques propositions qui nécessitaient de nouveaux mots-clés car il a estimé que les avantages l'emportaient sur les coûts, et non parce qu'il ne déteste pas ajouter de nouveaux mots-clés.

C'est aussi pourquoi, si vous regardez la liste que vous avez donnée, chacun d'entre eux est un composé car cela réduit les risques de conflit avec les identifiants existants.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X