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 longue façon de dire "non".
( override
et final
sont des «identificateurs avec une signification spéciale» et sont répertoriés dans le tableau 3; and
etc. sont des «représentations alternatives ... pour certains opérateurs et ponctuateurs» et sont répertoriés dans le tableau 5. Aucune des tables n'a été modifiée entre C ++ 11 et C ++ 14.)
register
mot clé est-il toujours utile ou utilisé dans le nouveau code C ++ 11?Je poste cette réponse dans le but de donner des outils pour trouver des réponses à des questions similaires.
Le projet standard est actuellement conservé dans un référentiel 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 le blâmez, nous pouvons constater que la dernière modification apportée à la table des mots clés a eu lieu en août 2011 (c'est en fait le premier commit: cette table n'a pas changé depuis la mise en service du dépôt à l'époque C ++ 11 était en cours de finalisation).Alternativement, nous pouvons demander à GitHub de comparer les deux projets envoyés au scrutin pour les deux versions de la norme: N3337 et N3936. Une différence entre les deux montre que les modifications apportées à
lex.tex
n'ont rien changé dans le tableau des mots-clés.la source
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 vers C ++ 11 principalement impliquée dans le nettoyage des bogues et dans la réalisation de petites améliorations à faible impact. Le prochain changement majeur sera probablement C ++ '17' où je m'attendrais à nouveau à de nouveaux mots clés.
Je pense qu'il vaut la peine de se demander pourquoi le comité évite d'ajouter de nouveaux mots clés (et, par ailleurs, 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 identificateur, ce qui signifie que l'ajout d'un nouveau mot clé rompt le code existant. La réutilisation ne violeauto
donc pas leur règle car aucun code existant ne peutauto
de toute façon être utilisé comme identifiant .Donc, pour accepter un nouveau mot-clé, il doit y avoir une justification qui l'emporte sur le coût d'un conflit potentiel avec le code existant et aucun moyen raisonnable d'implémenter la même chose sans nouveau mot-clé. Dans le cas du C ++ 11, le comité a accepté quelques propositions qui nécessitaient de nouveaux mots clés car ils estimaient que l'avantage l'emportait sur le coût, non pas parce qu'ils ne détestaient pas ajouter de nouveaux mots clés.
C'est aussi pourquoi, si vous regardez la liste que vous avez donnée, chacun est un mot-clé composé car cela réduit le risque de conflit avec les identifiants existants.
la source