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

时间:2019-08-08 23:59:26

标签: c++ language-lawyer

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

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

1 个答案:

答案 0 :(得分:6)

  

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

的确确实如此。全表达式不一定是表达式。对于init-declarator,它是一个声明符。

在该标准的早期版本中,将全表达式指定为专门的表达式,但是“某些上下文会导致对由句法构造其他产生的全表达式的求值。比表达” 。我尚未阅读建议更改措辞的提案。

  

那有什么意义

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

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

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

我已经在我的SO个人资料中列出了这些内容,由于这个问题,我添加了一个新的内容。

相关问题