7

功能范围是什么意思?

我了解变量的范围。当我们谈论函数的范围时,它是指结构(类)中的函数还是我们在main()C/C++ 程序中调用的普通函数的范围?

4

4 回答 4

8

宽泛地说,作用域是可以在其中声明名称的区域。在范围内声明的名称可以在该范围内访问,在某些情况下,也可以从外部访问。

(准确地说,这实际上是一个声明区域,名称的范围是程序中名称有效的部分。它从声明的地方开始,包括该区域的其余部分,有时还包括一些其他地区。)

范围由命名空间、类和复合语句(即,由 包围的代码语句块{})引入。最后一个包括函数体。

大多数对象和函数都有名称,每个名称都在一个范围内。

所以“函数的范围”可能意味着两件事:要么是由函数体定义的范围,其中声明了它的局部变量;或声明函数名的范围(类或命名空间)。

更新:你说你的意思是函数名的范围。这总是在声明之后立即开始;它在哪里结束取决于该声明的位置。

  • 如果它在命名空间内声明,它会持续到该命名空间关闭。如果稍后在同一个翻译单元中重新打开命名空间,那么它会回到那里的范围。
  • 如果它在类定义中声明为成员函数,则作用域将持续到类定义结束。它也在任何派生类的定义范围内,也在该类或派生类的成员定义内。
  • 如果它在类定义中声明为友元,或者在函数定义中,则名称实际上是在周围的命名空间中声明的,并且范围与这种情况相同。
于 2012-07-05T13:52:10.073 回答
7

函数可以具有全局、命名空间、类(在这种情况下通常称为成员)或本地(在另一个函数内)范围。它们也可以static给它们内部链接或在匿名命名空间内,使它们在翻译单元之外无法访问(同时仍然具有外部链接,因此它们可以用作模板参数)。

于 2012-07-05T13:50:48.120 回答
3

是的,函数也有作用域,尽管它们的作用域通常大于大多数变量的作用域。

在 C [编辑:这是我写这篇文章时的标签之一] 中,函数具有全局范围或文件范围。全局范围适用于在整个程序中可见的普通函数。文件范围适用于您标记为“静态”的函数,因此它仅在同一个翻译单元中可见。

C++ 使用的名称略有不同,但具有相同的基本概念。struct它以实际命名为“命名空间”和s/ classes的事物的形式添加命名空间。除了一个例外,命名空间中的函数仅在该命名空间内可见。例外情况是,如果您在/中定义friend函数:classstruct

class X {
    friend void whatever(X const &) { do_something(); }
};

在这种情况下,即使函数是在 内部定义的X,它的名称也会被注入到周围的命名空间中,因此它在 X 之外是可见的。

于 2012-07-05T13:54:05.840 回答
1

我认为这里的意思是标签标签是您在goto语句中使用的)可见的范围。

也许这篇文章也可以帮助你理解范围。您也可以在 stackoverflow 上查看这个问题。

于 2012-07-05T13:50:10.010 回答