标准引用,sec 3.3.1 / 1:
在名为a的程序文本的某些部分中引入了每个名称 声明性区域,这是程序中最大的部分 该名称有效,即该名称可用作其名称 非限定名称,指代同一实体。
并且有标准的例子,sec 3.3.1 / 2
int j = 24;
int main()
{
int i = j, j;
j = 42;
}
标识符j被声明为名称两次(并使用两次)。该 第一个j的声明性区域包括整个例子。该 第一个j的潜在范围在j和之后立即开始 延伸到程序的末尾,但其(实际)范围不包括 和之间的文字。
但是这两段在声明性区域定义中是矛盾的,因为j
可能不会在整个示例中使用,因为非限定名称ro指的是同一个实体。
答案 0 :(得分:2)
虽然定义有点模糊,但该术语的使用表明它意味着“该名称有效的程序的最大部分,如果没有被嵌套区域中具有相同名称的另一个实体隐藏” 。当然,如果外部实体被隐藏,名称仍然有效;标准定义的唯一问题是关于引用同一实体的一点。
实际上,这意味着整个命名空间,块或类定义(包括其成员定义),以及可能还有其他一些我现在无法想到的事情。
答案 1 :(得分:1)
C ++委员会试图做其他程序员无法理解标准的所有内容。此外,委员会公开无视委员会非成员提交的提案
如果不考虑这些令人困惑的语句并应用常识,则声明性区域可以是命名空间,函数范围或代码块范围等(例如类范围)。
第二个j的声明区域是函数的最外层代码块。实际上在标准中有书面
j的第二个声明的声明性区域(j 紧接在分号之前)包括{和。之间的所有文本 但是它的潜在范围不包括i的声明。
“ {和} 之间的所有文字”对应于该函数的最外层代码块。
因此声明性区域是声明变量并可以用作非限定名称的区域(命名空间,函数作用域,代码块作用域甚至函数参数作用域)。然而,它的潜在范围始于宣言。 因此,声明性区域总是大于或至少等于变量的潜在范围。