我正在研究C++标准,以理解操作顺序、表达式、语句和副作用。
相关问题是名称的“声明点”。在C++11标准的§3.3.2.1节中,标准规定:
“一个名称的声明点是在其完整的声明符(第8条)之后,其初始化器(如果有的话)之前...”
以下段落添加了一个带有示例的注释:
“注意:外部范围名称的名称仍然可见,直到隐藏它的名称的声明点。”
... 其中包括以下示例。
相关问题是名称的“声明点”。在C++11标准的§3.3.2.1节中,标准规定:
“一个名称的声明点是在其完整的声明符(第8条)之后,其初始化器(如果有的话)之前...”
以下段落添加了一个带有示例的注释:
“注意:外部范围名称的名称仍然可见,直到隐藏它的名称的声明点。”
... 其中包括以下示例。
const int i = 2;
{ int i[i]; }
该注释指出,此代码示例“声明了一个包含两个整数的块作用域数组”。
我希望能够查看示例代码,并通过应用“声明点”的定义以及关于外部作用域名称可见性的说明,自己得出这是良好形式的代码并且执行其预期功能的逻辑结论。
然而,根据这些定义和规则,我无法理解如何查看此代码并得出这个结论。
从左到右阅读,i[]
数组的声明似乎出现在来自外部作用域的 i
的使用之前,因此“保持可见性直至声明点”这个意思不能从左到右的阅读方式理解。
“直至声明点”必须在某种程度上意味着“操作顺序”方面的内容。
C++标准中的哪个定义或规则规定,在数组声明中,数组名称的“声明点”发生在方括号内表达式之后?在这种情况下,“之后”具体指什么?
i[i]
,还是int i[i]
? - Dan Nissenbaumint i [5],j
中,整个内容都是声明,i [5]
和j
是说明符。我认为这是一条奇怪的语法规则(可以看到像int (*foo)(),j
之类的东西),但我想它可能是从C继承过来的。无论你怎么看待它,声明的重点是在]
之后。 - Joseph Mansfieldi[i]
。声明符号是语法的一部分,不包括初始类型。 "声明符号在声明中声明单个变量、函数或类型。" - Joseph Mansfield