C ++ 14はC ++に新しいキーワードを追加していますか?


103

C ++標準委員会は、新しいキーワードを言語に追加することをためらう傾向がありますが、C ++ 11ではそうではありませんでした。いくつかの例:

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

C ++ 14で導入された新しいキーワードはありますか?

回答:


135

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.)


2
それは、すべての翻訳単位のグローバル名前空間に配置されているためだと思います。(そうです、なぜそうなるのか、そしてそれから...)
R. Martinho Fernandes

2
あるregisterキーワードは、やはり便利か、新しいC ++ 11のコードで使用されますか?
Walter

2
@Walter廃止予定であり、コンパイラーによって広く無視されています。
TC

1
論理演算子の代替トークンはこれらの表に記載されていませんか?それらはC ++キーワードではありませんか?
Nikos Athanasiou 2014

1
@NikosAthanasiou、この1つのIIRCの下にそれらの権利のためのテーブルがあります。
クリス

85

同様の質問に対する回答を見つけるためのツールを提供するために、この回答を投稿しています。

標準ドラフトは現在、パブリックGitHubリポジトリに保存されています。つまり、GitHub自体にこの質問をすることができます!

キーワードテーブルはファイルにありますsource/lex.tex。それを非難すると、2011年8月にキーワードテーブルへ最後の変更が行われたことがわかります(これは実際には最初のコミットです:リポジトリがC ++ 11の頃に稼働して以来、そのテーブルは変更されていません確定していました)。

あるいは、GitHubに、規格の両方のバージョン(N3337とN3936)の投票用に送信された2つのドラフトを比較するよう依頼することもできます。これら2つ違いは、への変更lex.texがキーワードテーブルの何も変更しなかったことを示しています。


1
これをありがとう!今日のところまだ変化がないようです。
sbi 2016年

34

C ++ 14では新しいキーワードは追加されません。C ++ 14はC ++ 11への小規模なアップグレードとして意図されているため、これは驚くべきことではありません。次の大きな変更は、C ++ '17'である可能性が高く、新しいキーワードがもう一度期待されます。

C ++標準委員会は、新しいキーワードを言語に追加することをためらう傾向がありますが、C ++ 11ではそうではありませんでした。

なぜ委員会が新しいキーワードの追加を避けているの(そして偶然になぜあなたがautoリストに含めるのが間違っているのか)を検討する価値があると思います。新しいキーワードの主な問題は、C ++では識別子としてキーワードを使用できないことです。つまり、新しいキーワードを追加すると、既存のコードが破損します。とにかくauto、既存のコードがauto識別子として使用できないため、転用してもルールに違反しませ

したがって、新しいキーワードを受け入れるには、既存のコードとの潜在的な衝突のコストを上回る正当化が必要であり、新しいキーワードなしで同じことを実装する賢明な方法はありません。C ++ 11の場合、委員会は、新しいキーワードを追加するのを嫌がらないからではなく、利益がコストを上回ると感じたため、新しいキーワードを必要とするいくつかの提案を受け入れました。

また、指定したリストを見下ろすと、既存の識別子と競合する可能性が低くなるため、それぞれが複合キーワードになります。


1
「C ++ '17'では、新しいキーワードがもう一度期待されます。」:C ++は最終的に成長しなくなりますか?
Giorgio

2
@Giorgioソフトウェアとハ​​ードウェアは最終的に進化しなくなりますか?ここでの大きなジレンマは、大胆な決定を下して「古い」構文を捨て、古いコードを壊して、言語の進化した部分だけを続行できるかどうかです。Pythonがそうしようとしています
Lorah Attkins 14

2
@NorahAttkins:明らかにソフトウェアは進化する必要がありますが、言語を無期限に成長させることが唯一の解決策ではありません。言語が特定のニッチに対して成熟している場合、互換性を常に壊して新しい言語を開始し、新しいニッチのニーズを満たすことができます。Pythonはその一例です。その他の例は、C ++-> Java、Java-> Scala、Common Lisp-> Clojure、C ++-> Dです。一部の言語は、コミュニティが、自分の好きな言語が唯一の真の言語であり、それを望んでいると確信しているため、無期限に成長しますすべての可能なアプリケーション領域に適しています。もちろん、この期待は現実的ではありません。
Giorgio
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.