id-expression究竟是什么?

Jus*_*tin 16 c++ language-lawyer

我有一个问题,清楚地了解究竟是什么id-expression.我将从最初的C++标准工作草案开始,遵循以下内容:

在此输入图像描述

冒险定义identifier:

标识符是任意长的字母和数字序列.

因此,似乎任意长的字母和数字序列都可以是一个id-expression,但等待:

在此输入图像描述

所以identifier必须先声明它才能成为一个id-expression?那么让我们来看看第7条:

在此输入图像描述

继续...

在此输入图像描述

继续......

在此输入图像描述

我们到达这里:

在此输入图像描述

我将此解释为id-expression需要identifier声明需要的声明id-expression.这似乎是一个循环定义.谁能告诉我哪里出错了?

无论如何,我的解释是必须首先声明标识符才能将其视为一个标识符id-expression,但这不是真的只是一个标识符name吗?该标准规定:

表示实体的每个名称都由声明引入.

那么为什么不把它称之为呢name-expression

Col*_*mbo 4

您误解了[expr.prim.general]/8

标识符是一个id 表达式,只要它已被适当声明(第 7 条)。

该短语的目的是禁止在表达式中使用未声明的标识符。即,本段讨论的是作为主表达式出现的id-表达式而不是在声明符中出现的id-表达式。我同意这个短语具有误导性,应该予以修正。我提出了一个核心问题。

那么为什么不直接将其称为名称表达式呢?

历史原因;标识符和名称之间的微妙区别是在命名非常基本的语法结构( id-expressionunqualified-id等)之后进行的,从那时起,重命名这些结构就不再是一种选择。