C ++ 14是否在C ++中添加了新关键字?


103

C ++标准委员会倾向于回避向该语言添加新的关键字,但是对于C ++ 11而言并非如此。一些例子:

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

C ++ 14引入了新的关键字吗?

Answers:


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(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中列出;and等是“对于某些运算符和标点符的替代表示...”,并在表5中列出。在C ++ 11和C ++之间都未更改任何表14.)


2
我之所以这么说是因为它们被放在每个翻译单元的全局名称空间中。(是的,您可以问为什么会这样,然后呢……)
R. Martinho Fernandes 2014年

2
register关键字还是有用的或新的C ++代码11使用?
Walter

2
@Walter无论如何,它已被编译器弃用并被广泛忽略。
TC

1
这些表中未提及逻辑运算符的替代标记?它们不是C ++关键字吗?
Nikos Athanasiou 2014年

1
@NikosAthanasiou,这个IIRC下有一张桌子。
克里斯

85

我发布此答案是为了提供寻找类似问题答案的工具。

该标准草案目前保存在公共GitHub存储库中。这意味着您可以向GitHub本身问这个问题!

关键字表在文件上source/lex.tex。如果您对此负责,我们可以发现对关键字表最后一次更改是在2011年8月进行的(实际上是第一次提交:自从回购在C ++ 11左右上线以来,该表一直没有更改。即将完成)。

或者,我们可以要求GitHub比较针对两个标准版本(N3337和N3936)发送的两个草案。两者之间差异表明,对的更改lex.tex未更改关键字表中的任何内容。


1
谢谢你!看起来到目前为止,仍然没有任何变化。
2016年

34

C ++ 14不会添加任何新关键字。这并不奇怪,因为C ++ 14旨在作为对C ++ 11的小升级,主要涉及清理bug和进行小的,低影响的改进。下一个主要变化可能是C ++'17',我希望新的关键字再次出现。

C ++标准委员会倾向于回避向该语言添加新的关键字,但是对于C ++ 11而言并非如此。

我认为值得考虑的,委员会为何回避添加新的关键字(巧合的是,为什么您错误地将其包括auto在列表中)。新关键字的主要问题是在C ++中,您不能使用关键字作为标识符,这意味着添加新关键字会破坏现有代码。再利用auto,那么,不打破他们的规则,因为没有现成的代码可以使用auto作为标识符反正

因此,为了接受新关键字,需要有充分的理由证明其与现有代码潜在冲突的代价,并且如果没有新关键字,则没有明智的方式来实现同一件事。就C ++ 11而言,委员会接受了一些要求使用新关键字的提议,因为他们认为收益大于成本,并不是因为他们不喜欢添加新关键字。

这也是为什么,如果您查看给出的列表,每个输入都是复合关键字的原因,因为这样可以减少它们与现有标识符冲突的可能性。


1
“在C ++'17'中,我将再次期望新的关键字。”:C ++最终会停止增长吗?
Giorgio 2014年

2
@Giorgio软件和硬件最终会停止发展吗?这里最大的难题是您是否可以做出大胆的决定,放弃“旧的”语法,破坏旧的代码,然后继续处理该语言的演化部分。Python有点尝试这样做
Lorah Attkins 2014年

2
@NorahAttkins:显然,软件必须发展,但无限地发展语言并不是唯一的解决方案:当一种语言在某个特定领域已经成熟时,您可以随时打破兼容性并开始一种新语言以满足新壁ni的需求。Python是一个例子。其他示例是C ++-> Java,Java-> Scala,Common Lisp-> Clojure,C ++->D。某些语言会无限增长,因为他们的社区深信他们最喜欢的语言是唯一的真实语言,并且他们希望这样做适用于所有可能的应用领域。当然,这种期望是不现实的。
Giorgio 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.