【问题标题】:What's the difference between declarative region and scope声明性区域和范围有什么区别
【发布时间】:2014-05-13 11:37:23
【问题描述】:

关于声明性区域:

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

关于范围:

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

它们之间有什么区别?

【问题讨论】:

    标签: c++ scope


    【解决方案1】:

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

    范围只是程序文本的一些 sn-p。如果你说“这个名字的范围”,这个短语是指程序文本中可以使用名字不限定形式找到这个名字的部分。

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

    【讨论】:

    • 感谢您的回答!但是这个决议没有被 N3797 草案接受。现在是最终的工作草案吗?此问题的状态如何?
    • 是的,该问题目前似乎处于闲置状态。我建议在 std-discussion 上询问有关为什么目前没有工作的更多信息。
    • 这个问题描述了这个概念的实际定义是真的吗?我可以使用它们来代替不明确的标准定义吗?
    • 我想是的。如果您在标准讨论中提问,gabriel dos reis 很可能会亲自回答您。
    • 另见wg21.link/p1787,它解决了上述问题,目前正在等待审核
    【解决方案2】:

    我不确定您是从哪里获得这些定义的。它们在我看来确实一样。但是我发现了这篇文章:

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

    看看这个例子:

    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

    【讨论】:

    • 此定义来自标准。
    【解决方案3】:

    声明性区域和范围之间的区别就像房间和位置之间的区别。

    声明性区域(房间)的存在与特定名称无关。您定义了一个类、一个函数体或一个命名空间——由此引入了一个声明性区域。然后,您可以在该声明性区域中声明名称(将东西放入房间);或者您可以让该区域没有任何名称(空房间)。

    在范围(位置)中,我们只能与名称相关;它本身没有范围,范围始终是名称的属性(就像位置是事物的属性)。名称的潜在范围与引入该名称的声明区域一致。

    【讨论】:

      【解决方案4】:

      在您提供的定义中,我只是将它们视为同一枚硬币的两个面。 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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-11-27
        • 1970-01-01
        • 2014-12-22
        相关资源
        最近更新 更多