功能范围是什么意思?

时间:2012-07-05 13:43:44

标签: c++ scope

功能范围是什么意思?

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

4 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:5)

简而言之,范围是可以声明名称的区域。在范围内声明的名称可在该范围内访问,在某些情况下也可从外部访问。

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

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

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

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

更新:你说你的意思是函数名称的范围。这总是在宣言后立即开始;它结束的地方取决于声明的位置。

  • 如果在命名空间内声明它,它将持续到该命名空间关闭。如果稍后在同一个翻译单元中重新打开名称空间,那么它将返回到那里。
  • 如果在类定义中将其声明为成员函数,则作用域将持续到类定义的结尾。它也在任何派生类的定义范围内,也在该类或派生类的成员定义内。
  • 如果在类定义中将其声明为朋友,或者在函数定义中声明,则该名称实际上是在周围的命名空间中声明的,并且范围与该情况相同。

答案 2 :(得分:2)

是的,函数也有范围,但它们的范围通常大于大多数变量。

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

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

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

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

答案 3 :(得分:0)

我认为这里的含义是标签(A 标签goto语句一起使用)的范围是可见的。

也许this文章也可以帮助您了解范围。 您还可以查看stackoverflow上的this问题。