初始化声明符的全表达式定义

Kry*_*n S 4 c++ language-lawyer

定义全表达在的情况下,初始化说明符是与所述“包含”所应用的初始化的组成表达,以及任何转换/被称为隐式(构造)的功能。这意味着全表达式甚至不必是表达式,这没有意义,因为它被称为一个表达式(init-declarator不是表达式)。此外,在标准中,将完整表达式当作一个表达式使用,那么,如果它可以包含不相交的表达式,甚至不是表达式的内容,那又有什么意义呢?

无论如何,我的主要问题是,为什么不总是表达式的全表达式被视为表达式?那应该如何工作?

eer*_*ika 6

这意味着全表达式甚至不必是表达式

确实,这确实意味着这一点。全表达式不一定是表达式。对于init-declarator,它是一个声明器。

在该标准的较早版本中,将全表达式具体指定为一种表达式,但是“某些上下文导致对由除表达式以外的语法构造产生的全表达式的评估”。我尚未阅读建议更改措辞的提案。

那有什么意义

令人费解和困惑。这不是命名不当的唯一情况。该标准中有很多类似的例子:

  • 成员指针不是指针
  • 默认初始化可能会使对象保持未初始化状态

与完全表达很像,它们在直观上没有多大意义,但是无论如何,这就是指定语言的方式。

我已经在我的SO配置文件中列出了这些,由于这个问题,我添加了一个新的。

  • 仅仅因为并非所有_full-expressions_都是表达式,并不意味着不存在_are_表达式的_full-expressions_,因此可以对其求值。好,针织! (2认同)