id-expression究竟是什么?

时间:2015-07-15 20:49:48

标签: c++ language-lawyer

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

enter image description here

探究identifier

的定义
  

标识符是一个任意长的字母和数字序列。

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

enter image description here

因此必须首先声明identifier才能使其成为id-expression?那么让我们来看看第7条:

enter image description here

...继续

enter image description here

继续......

enter image description here

我们到达这里:

enter image description here

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

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

  

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

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

1 个答案:

答案 0 :(得分:1)

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

  

标识符 id-expression ,只要它已被适当声明(第7条)。

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

  

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

历史原因;标识符和名称之间的细微区别是在非常基本的语法结构( id-expression unqualified-id 等)被命名后,并从那里开始重命名那些不是一个选择。