C ++ 14是否将新的关键字添加到C ++?

C ++标准委员会倾向于避免将新的关键字添加到语言中,而C ++ 11则不是这种情况。 一些例子:

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

C ++ 14中是否引入了新的关键字?

表4(关键字)在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 

N3337(C ++ 11)中的表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 

这是一个冗长的说“不”的方式。

overridefinal是表3中列出的“具有特殊含义的标识符”;等等是“对于某些操作符和标点符号的替代表示”,并在表5中列出。这两个表都在C ++ 11和C ++ 14)。

我发布这个答案的目的是为了find类似问题的答案的工具。

标准草案目前保存在一个公共的GitHub仓库中。 这意味着你可以问这个问题给GitHub本身!

关键字表位于source/lex.tex文件中。 如果您对此有所责备,我们可以发现对关键字表的最后一次更改发生在2011年8月(实际上是第一次提交:自从回购库在C ++ 11上线之后,该表没有发生变化正在定稿)。

或者,我们可以要求GitHub比较两个标准版本的两个草稿:N3337和N3936。 这两者之间的差异表明,对lex.tex的更改不会改变关键字表中的任何内容。

C ++ 14不会添加新的关键字。 这并不令人惊讶,因为C ++ 14旨在作为对C ++ 11的小升级,主要用于清除错误并进行小的,低影响的改进。 下一个主要的变化可能是C ++'17',在那里我会再次期待新的关键字。

C ++标准委员会倾向于避免将新的关键字添加到语言中,而C ++ 11则不是这种情况。

我认为值得考虑一下, 为什么委员会不愿意添加新的关键字(并且偶然为什么你错误地将auto到列表中)。 新关键字的主要问题是,在C ++中,不能使用关键字作为标识符,这意味着添加新的关键字会破坏现有的代码。 因此,重新使用auto将不会违反规则,因为现有的代码无论如何都不能使用auto作为标识符。

因此,为了接受一个新的关键字,需要有一个理由,这个理由超过了与现有代码的潜在冲突的代价,没有一个明智的方式来实现同样的事情,而没有新的关键字。 在C ++ 11的情况下,委员会接受了几个需要新关键字的build议,因为他们认为这样做的好处超过了成本,并不是因为他们不讨厌添加新的关键字。

这也是为什么,如果你向下看你给的名单,每一个都是复合关键字,因为这减less了他们与现有标识符冲突的机会。