C++ 职能范围是什么意思?

C++ 职能范围是什么意思?,c++,scope,C++,Scope,职能范围是什么意思 我理解变量的范围。当我们谈论函数的范围时,它是指结构(类)中的函数,还是我们在C/C++程序的main()中调用的普通函数的范围?我认为这里的意思是标签(标签是您在goto语句中使用的)是可见的 也许这篇文章还可以帮助您理解范围。 您还可以查看有关stackoverflow的问题。函数可以具有全局、命名空间、类(在这种情况下通常称为成员)或局部(在另一个函数中)作用域。它们也可以是静态的给它们提供内部链接,或者在匿名名称空间中,使它们在翻译单元之外无法访问(同时仍然具有外部链

职能范围是什么意思


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

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

也许这篇文章还可以帮助您理解范围。
您还可以查看有关stackoverflow的问题。

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

不严格地说,作用域是可以声明名称的区域。在作用域中声明的名称可以在该作用域内访问,在某些情况下,也可以从外部访问

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

作用域由名称空间、类和复合语句(即由
{}
包围的代码语句块)引入。最后一项包括职能机构

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

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

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

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

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

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

C++使用的名称稍有不同,但基本概念相同。它以实际命名为“namespace”和
struct
s/
class
es的形式添加名称空间。除了一个例外,命名空间中的函数仅在该命名空间中可见。例外情况是,如果在
/
结构
中定义了
友元
函数:

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

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

您在哪里遇到过这样的措辞?请注意函数本身的作用域(该标识符在哪里有效?——与变量的作用域相同)函数范围,它是函数所跨越的另一个标识符的范围(函数中定义的变量在
{
}
之间有效)。@sbi,很好的一点,这里的好答案只涉及第一个定义,但问题可能是关于另一个定义的。您所指的这个变量是“函数范围”不是函数的作用域。@FelicePollano,对不起,我误解了这个问题。作用域实际上不是指可以访问名称的区域,例如,一个作用域可以跨越多个块。至少一个变量的作用域是从声明它的点开始的。@unkulunkulu:从技术上讲,它是名称有效的区域,我用它来稍微松散地引用声明区域。我会看看我是否能在不太复杂的情况下让答案更准确一点。是的,我的措辞很糟糕,我的主要观点是“声明的”单词也不是100%正确。谢谢,我指的是函数名声明为u的范围mentioned@DonLarynx声明区域是可以显示声明的单个连续区域。作用域是一组可能不连续的区域,其中声明的名称是可访问的。如果你想知道准确的定义,请参阅标准。谢谢,我和你一样认为,杰里·科芬的答案是完整的。这并不能回答这个问题。没有地方提到作用域的实际含义——只有作用域函数可以有什么。