2014-05-15 112 views
2

的实际定义有一个从标准报价,秒3.3.1/1:什么是声明区

每名在程序文本中的某些部分引入了称为 声明区,这是该程序的最大部分 该名称是有效的,也就是说,该名称可用作 非限定名称来引用同一个实体。

而且存在从标准的例子,仲3.3.1/2

int j = 24; 
int main() 
{ 
    int i = j, j; 
    j = 42; 
} 

标识符j被声明两倍的名称(和使用了两次)。第一个j的声明区域包含整个示例。第一个j的潜在范围在j和 延伸到程序结束后立即开始,但其(实际)范围不包括 之间的文本和}。

但这两个段落都在声明性区域定义矛盾,因为j可能不能在整个实施例中使用为不合格名ロ指代相同实体

+0

什么是定义? –

回答

2

虽然定义有点模糊,但该术语的用法表明它的意思是“程序的最大部分,如果该名称在嵌套区域中具有相同名称的其他实体不被隐藏,该名称将是有效的”。当然,如果外部实体隐藏,名称仍然有效;标准定义的唯一问题是关于引用同一个实体的位。

实际上,这意味着整个名称空间,块或类定义(包括其成员定义),以及可能还有其他一些我现在无法想到的其他东西。

1

C++委员会试图去做所有其他程序员无法理解的标准。此外,委员会公开忽略委员会非成员提交的提案

如果不考虑这些令人困惑的陈述并应用常识,那么声明区域可以是名称空间,函数作用域或代码块作用域和等等(例如类范围)。

第二个j的声明区域是该函数的最外面的代码块。实际上在标准那里被写入

Ĵ(第j 立即分号之前)的所述第二声明的声明性区域包括所有{ 和}之间的文字,但其潜在的范围不包括的声明一世。

所有之间的文本{和}”对应于该函数的最外代码块。

所以声明区域是声明变量并且可以用作非限定名称的区域(名称空间,函数作用域,代码块作用域或甚至函数参数作用域)。然而,其潜在的范围从宣言的角度开始。 因此,声明区域总是大于或至少等于变量的潜在范围。

+0

我不确定我是否同意第一句话;我喜欢把自己想象成程序员,但是我发现大部分标准都很可读(除了像这样一些含糊不清的定义)。 –

+1

@Mike Seymour这是因为你是一位有经验的程序员,你已经数十次讨论过这些问题。但是这并不能使标准更好。 –