Tabelle 4 (Schlüsselwörter) in 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
Tabelle 4 in 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
... was eine langatmige Art ist, "nein" zu sagen.
( override
und final
sind "Bezeichner mit besonderer Bedeutung" und in Tabelle 3 aufgeführt; and
usw. sind "alternative Darstellungen ... für bestimmte Operatoren und Interpunktionszeichen" und in Tabelle 5 aufgeführt. Keine der beiden Tabellen hat sich zwischen C ++ 11 und C ++ geändert 14.)
register
Schlüsselwort noch nützlich oder wird es in neuem C ++ 11-Code verwendet?Ich poste diese Antwort, um Tools zu finden, mit denen Sie Antworten auf ähnliche Fragen finden können.
Der Standardentwurf wird derzeit in einem öffentlichen GitHub-Repository gespeichert. Das heißt, Sie können diese Frage an GitHub selbst stellen!
Die Schlüsselworttabelle befindet sich in der Datei
source/lex.tex
. Wenn Sie die Schuld daran geben, können wir feststellen, dass die letzte Änderung an der Keyword-Tabelle im August 2011 stattgefunden hat (es ist tatsächlich das erste Commit: Diese Tabelle hat sich nicht geändert, seit das Repo um die Zeit von C ++ 11 live gegangen ist wurde fertiggestellt).Alternativ können wir GitHub bitten, die beiden Entwürfe zu vergleichen, die für beide Versionen des Standards zur Abstimmung gesendet wurden: N3337 und N3936. Ein Unterschied zwischen diesen beiden zeigt, dass die Änderungen an
lex.tex
nichts in der Schlüsselworttabelle geändert haben.quelle
Mit C ++ 14 werden keine neuen Schlüsselwörter hinzugefügt. Dies ist nicht überraschend, da C ++ 14 als kleines Upgrade auf C ++ 11 gedacht ist, das hauptsächlich dazu dient, Fehler zu beseitigen und kleine Verbesserungen mit geringen Auswirkungen vorzunehmen. Die nächste große Änderung wird wahrscheinlich C ++ '17' sein, wo ich wieder neue Schlüsselwörter erwarten würde.
Ich denke, es lohnt sich zu überlegen, warum das Komitee es scheut, neue Keywords hinzuzufügen (und zufällig, warum Sie falsch sind,
auto
in Ihre Liste aufzunehmen). Das Hauptproblem bei neuen Schlüsselwörtern besteht darin, dass Sie in C ++ kein Schlüsselwort als Bezeichner verwenden können. Dies bedeutet, dass das Hinzufügen eines neuen Schlüsselworts den vorhandenen Code beschädigt. Eine erneute Verwendung verstößtauto
also nicht gegen ihre Regel, da ohnehin kein vorhandener Codeauto
als Bezeichner verwendet werden kann .Um ein neues Schlüsselwort zu akzeptieren, muss es eine Begründung geben, die die Kosten eines möglichen Konflikts mit vorhandenem Code überwiegt, und keine sinnvolle Möglichkeit, dasselbe ohne ein neues Schlüsselwort zu implementieren. Im Fall von C ++ 11 akzeptierte das Komitee einige Vorschläge, die neue Schlüsselwörter erforderten, da sie der Ansicht waren, dass der Nutzen die Kosten überwog, nicht weil sie es nicht hassen, neue Schlüsselwörter hinzuzufügen.
Wenn Sie sich die Liste ansehen, die Sie angegeben haben, ist jedes einzelne ein zusammengesetztes Schlüsselwort, da dies die Wahrscheinlichkeit verringert, dass sie mit vorhandenen Kennungen in Konflikt geraten.
quelle