关于声明区域:
在名为a的程序文本的某些部分中引入了每个名称 声明性区域,这是程序中最大的部分 该名称有效
关于范围:
通常,每个特定名称仅在某些可能的范围内有效 程序文本的不连续部分称为其范围。
它们之间有什么区别?
答案 0 :(得分:6)
声明性区域是可以声明名称的地方。它们可以在块,类主体或命名空间的主体中声明等。
范围只是程序文本的一些片段。如果你说“这个名称的范围”,这个短语指的是程序文本的一部分,可以使用名称不合格的形式找到该名称。
目前这两个术语在标准中都有缺陷形式,并且有long standing active issue来修复这些缺陷。
答案 1 :(得分:1)
我不确定你从哪里获取这些定义。它们对我来说看起来一样。不过我发现这篇文章:
简而言之,范围回答了“我在哪里可以使用此名称?”的问题。和 声明空间回答“这个名称在哪里独特?”的问题。
看一下这个例子:
class C {
int x;
void M() {
int x;
}
}
x
的范围是C
的整个主体,而声明性区域是C
的整个主体,不包括M
的主体。来源:
答案 2 :(得分:1)
声明性区域和范围之间的区别就像房间和位置之间的区别。
存在声明性区域(房间),与特定名称无关。您可以定义类,函数体或命名空间 - 从而引入声明性区域。然后,您可以将名称声明到该声明区域(将内容放入房间);或者你可以离开该地区没有任何名字(空房间)。
范围(地点)我们只能谈论名称;它本身没有范围,范围始终是名称的属性(例如,位置是事物的属性)。名称的潜在范围与引入该名称的声明性区域一致。
答案 3 :(得分:0)
在您提供的定义中,我只是将它们视为同一枚硬币的两面。 declaration area
是变量生命周期的开始,scope
定义了结尾。通俗地讲,scope
通常是指从开始到结束的变量的完整生命周期。请参阅下面的示例。
void someFunction ()
{
int x = 5; // declaration of x
for (int i = 0; i < 10; ++i)
{
int a = 3; // declaration of a
std::cout << a << std::endl;
} // end of scope for a
} // end of scope for x