我正在研究 C++ 标准以了解操作、表达式、语句和副作用的顺序。
一个相关的问题是名称的“声明点”。在 C++11 标准的第 3.3.2.1 节中,标准规定:
名称的声明点紧跟在它的完整声明符(第 8 条)之后和它的初始化器(如果有的话)之前......
以下段落添加了一个带有示例的注释:
注意:来自外部范围的名称在隐藏它的名称的声明点之前保持可见。
... 举个例子
const int i = 2;
{ int i[i]; }
并且注释指出此代码示例“声明了一个由两个整数组成的块范围数组”。
我希望能够查看示例代码,并通过应用“声明点”的定义以及有关名称从外部范围的可见性的注释,能够查看该代码并得出合乎逻辑的我自己的结论是,它是格式良好的代码,它可以完成它看起来要做的事情。
但是,基于这些定义和规则,我无法理解如何查看此代码并得出此结论。
从左到右阅读,i[]
数组的声明似乎出现在使用外部作用域之前,因此“在声明点之前i
保持可见”的含义不能表示从左到右阅读感觉。
“直到声明点”必须意味着类似于“操作顺序”的意思。
C++ 标准中的什么定义或规则规定在数组声明中,数组名称的“声明点”出现在方括号内的表达式“之后”?在这种情况下,“之后”到底是什么意思?