回答:
N3936(C ++ 14)の表4(キーワード):
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
N3337の表4(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
...これは「いいえ」と言うのに長続きする方法です。
(override
およびfinal
は「特別な意味を持つ識別子」であり、表3にリストされています。and
その他は「特定の演算子および句読点の代替表現」であり、表5にリストされています。C++ 11とC ++の間でどちらのテーブルも変更されていません14.)
register
キーワードは、やはり便利か、新しいC ++ 11のコードで使用されますか?
同様の質問に対する回答を見つけるためのツールを提供するために、この回答を投稿しています。
標準ドラフトは現在、パブリックGitHubリポジトリに保存されています。つまり、GitHub自体にこの質問をすることができます!
キーワードテーブルはファイルにありますsource/lex.tex
。それを非難すると、2011年8月にキーワードテーブルへの最後の変更が行われたことがわかります(これは実際には最初のコミットです:リポジトリがC ++ 11の頃に稼働して以来、そのテーブルは変更されていません確定していました)。
あるいは、GitHubに、規格の両方のバージョン(N3337とN3936)の投票用に送信された2つのドラフトを比較するよう依頼することもできます。これら2つの違いは、への変更lex.tex
がキーワードテーブルの何も変更しなかったことを示しています。
C ++ 14では新しいキーワードは追加されません。C ++ 14はC ++ 11への小規模なアップグレードとして意図されているため、これは驚くべきことではありません。次の大きな変更は、C ++ '17'である可能性が高く、新しいキーワードがもう一度期待されます。
C ++標準委員会は、新しいキーワードを言語に追加することをためらう傾向がありますが、C ++ 11ではそうではありませんでした。
なぜ委員会が新しいキーワードの追加を避けているのか(そして偶然になぜあなたがauto
リストに含めるのが間違っているのか)を検討する価値があると思います。新しいキーワードの主な問題は、C ++では識別子としてキーワードを使用できないことです。つまり、新しいキーワードを追加すると、既存のコードが破損します。とにかくauto
、既存のコードがauto
識別子として使用できないため、転用してもルールに違反しません。
したがって、新しいキーワードを受け入れるには、既存のコードとの潜在的な衝突のコストを上回る正当化が必要であり、新しいキーワードなしで同じことを実装する賢明な方法はありません。C ++ 11の場合、委員会は、新しいキーワードを追加するのを嫌がらないからではなく、利益がコストを上回ると感じたため、新しいキーワードを必要とするいくつかの提案を受け入れました。
また、指定したリストを見下ろすと、既存の識別子と競合する可能性が低くなるため、それぞれが複合キーワードになります。