我有一个问题,清楚地了解id-expression
究竟是什么。我将从最近的C ++标准工作草案开始,遵循以下内容开始:
探究identifier
:
标识符是一个任意长的字母和数字序列。
所以似乎任意长的字母和数字序列都可以是id-expression
,但等待:
因此必须首先声明identifier
才能使其成为id-expression
?那么让我们来看看第7条:
...继续
继续......
我们到达这里:
我将此解释为id-expression
需要声明identifier
才需要id-expression
。这似乎是一个循环定义。有人能告诉我哪里出错了吗?
无论如何,我的解释是必须首先声明标识符才能将其视为id-expression
,但实际上只是name
?该标准规定:
表示实体的每个名称都由声明引入。
那么为什么不把它称为name-expression
呢?
答案 0 :(得分:1)
标识符是 id-expression ,只要它已被适当声明(第7条)。
该短语的目的是禁止在表达式中使用未声明的标识符。即本段讨论 id-expression 出现在 primary-expression s ,而不是 id-expression s声明符。我同意这句话具有误导性,应予以修正。我提出了一个核心问题。
那么为什么不把它称为 name-expression 呢?
历史原因;标识符和名称之间的细微区别是在非常基本的语法结构( id-expression , unqualified-id 等)被命名后,并从那里开始重命名那些不是一个选择。