什么是功能范围是什么意思?(What does scope of functions mean?)

2019-06-26 02:02发布

什么是功能范围是什么意思?

我理解变量的作用域。 当我们谈到的功能的范围内,是它的结构内所提到的功能(类)或是否有余地,我们在调用的正常功能main()一个C / C ++程序?

Answer 1:

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



Answer 2:

宽泛地说,一个范围中的名字可以声明的区域。 在一个范围内声明的名称是范围之内到达,并在某些情况下,还从外面。

(要迂腐准确的,实际上是一个声明区 ,和一个名字的范围是其中的名称是有效的程序的一部分。它开始在那里的声明,包括该地区的其余部分,有时,一些其他地区。)

范围是由命名空间,类,和复合语句引入(即,由包围代码语句块{} 最后一个包括功能的机构。

大多数对象和功能有名称,并且每一个这些名字是一个范围内。

因此,“功能的范围内”可能意味着两件事情:要么通过函数体,在局部变量声明所界定的范围; 或范围(无论是一个类或一个命名空间),在该函数名被声明。

更新:你说你的意思是函数名的范围。 这总是宣布后立即开始; 在那里结束方式取决于该声明了。

  • 如果一个命名空间内声明,它会一直持续到该命名空间被关闭。 如果命名空间在同一个翻译单元后重新打开,然后回来为范围存在。
  • 如果一个类定义为成员函数内声明,则该范围持续到类定义的结尾。 它也是在范围内的任何派生类的定义内,并且还该类或派生类的成员的定义内。
  • 如果一个类定义为好友内声明,或函数定义里面,然后名称实际上是在周围的命名空间中声明,并且范围是相同的情况。


Answer 3:

是的,功能具有范围为好,但其范围通常比大多数变量更大。

在C [编辑:这是标签中的一个,当我写这篇],功能有全局作用域或文件范围。 全球范围适用于正常功能那是在整个程序中可见。 文件范围适用于您已标记为“静态”的功能,所以它只能在同一翻译单元内可见。

C ++使用这些名称稍有不同,但具有相同的基本概念。 它增加了命名空间中的实际名为“命名空间”和事物的形式struct S / class上课。 但有一个例外,在命名空间中的功能仅在该命名空间是可见的。 唯一的例外是,如果你定义一个friend一个内部功能class / struct

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

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



Answer 4:

我想在这里所指的是在标签标签是你用的什么范围goto语句)是可见的。

也许这个文章也可以帮助你理解范围。 您还可以看看这对计算器的问题。



文章来源: What does scope of functions mean?
标签: c++ scope