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?
标识符是一个id 表达式,只要它已被适当声明(第 7 条)。
该短语的目的是禁止在表达式中使用未声明的标识符。即,本段讨论的是作为主表达式出现的id-表达式,而不是在声明符中出现的id-表达式。我同意这个短语具有误导性,应该予以修正。我提出了一个核心问题。
那么为什么不直接将其称为名称表达式呢?
历史原因;标识符和名称之间的微妙区别是在命名非常基本的语法结构( id-expression、unqualified-id等)之后进行的,从那时起,重命名这些结构就不再是一种选择。