我很难清楚地理解 id-expression
是什么。我将按照我在最新的 C++ 标准工作草案中找到的内容开始:
冒险定义一个标识符
:
An identifier is an arbitrarily long sequence of letters and digits.
所以看起来任意长的字母和数字序列都可以是id-expression
,但请稍等:
所以 identifier
必须先声明才能成为 id-expression
?好吧,让我们转到第 7 条:
继续...
继续……
我们到了:
我将其解释为 id-expression
需要声明一个 identifier
,这需要 id-expression
。这似乎是一个循环定义。谁能告诉我哪里出错了?
无论如何,我的解释是必须先声明标识符才能将其视为 id-expression
,但这不只是一个 name
?该标准规定:
Every name that denotes an entity is introduced by a declaration.
那么为什么不直接将其称为 name-expression
呢?
最佳答案
您误解了 [expr.prim.general]/8 :
An identifier is an id-expression provided it has been suitably declared (Clause 7).
该短语的目的是禁止在表达式中使用未声明的标识符。 IE。本段讨论的是 id-expressions 作为 primary-expressions 出现,而不是 id-expressions 出现在声明者。我同意该短语具有误导性,应予以修正。我提交了一个核心问题。
So why not just call it a name-expression instead?
历史原因;标识符和名称之间的细微区别是在非常基本的语法结构(id-expression、unqualified-id 等)被命名之后进行的,然后再重新命名那些不是一个选择。
关于c++ - 什么是 id 表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31440790/