声明区域和范围之间有什么区别

时间:2014-05-13 11:37:24

标签: c++ scope

关于声明区域:

  

在名为a的程序文本的某些部分中引入了每个名称   声明性区域,这是程序中最大的部分   该名称有效

关于范围:

  

通常,每个特定名称仅在某些可能的范围内有效   程序文本的不连续部分称为其范围。

它们之间有什么区别?

4 个答案:

答案 0 :(得分:6)

声明性区域是可以声明名称的地方。它们可以在块,类主体或命名空间的主体中声明等。

范围只是程序文本的一些片段。如果你说“这个名称的范围”,这个短语指的是程序文本的一部分,可以使用名称不合格的形式找到该名称。

目前这两个术语在标准中都有缺陷形式,并且有long standing active issue来修复这些缺陷。

答案 1 :(得分:1)

我不确定你从哪里获取这些定义。它们对我来说看起来一样。不过我发现这篇文章:

  

简而言之,范围回答了“我在哪里可以使用此名称?”的问题。和   声明空间回答“这个名称在哪里独特?”的问题。

看一下这个例子:

class C {
    int x;
    void M() {
        int x;
    }
}

x的范围是C的整个主体,而声明性区域是C的整个主体,不包括M的主体。来源:

http://blogs.msdn.com/b/ericlippert/archive/2009/08/03/what-s-the-difference-part-two-scope-vs-declaration-space-vs-lifetime.aspx

答案 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