c++ - 局部作用域和函数作用域的区别

标签 c++ scope

曾经我认为这两个具有相同的含义,但在阅读更多相关内容后,我仍然不清楚它们之间的区别。局部范围有时不是指功能范围吗? 只有标签有函数作用域是什么意思?

最佳答案

void doSomething()
{                                    <-------
     {                   <----               | 
                              |              |
         int a;           Local Scope    Function Scope
                              |              |
     }                   <----               | 
}                                    <------- 

函数范围在外部 { } 之间。

局部作用域在内部 { } 之间

请注意,由 {``} 创建的任何范围都可以作为本地范围调用,而函数体开头的 {``} 创建功能范围。
因此,有时局部作用域可以与函数作用域相同。

what does it mean that only labels have a function scope?

Labels 只是标识符后跟一个冒号。带标签的语句用作 goto 语句的目标。标签可以在它们出现的函数中的任何地方使用,但不能在函数体之外引用。因此,据说它们具有功能范围。

代码示例:

int doSomething(int x, int y, int z)
{
     label:  x += (y + z);   /*  label has function scope*/
     if (x > 1) 
         goto label;
}

int doSomethingMore(int a, int b, int c)
{
     if (a > 1) 
         goto label; /*  illegal jump to undefined label */
}

关于c++ - 局部作用域和函数作用域的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7933814/

相关文章:

c++ - Windows 上最好的免费 C++ 分析器是什么?

c++ - 类设计调用另一个类的成员函数

javascript - 非常奇怪的 Javascript 范围问题

python - 尝试在 for 循环之外使用变量会出现 SyntaxError : no binding for nonlocal 'max_' found

c++ - 无法成功返回我通过在字符串上调用 c_str() 创建的 const char*。 (C++)

c# - C、C++、C# 的功能测试工具

c++ - 从文件读入 2 个数组

c++ - CArchive 当前在文件中的位置

JavaScript 意外的变量作用域行为

c++ - 我在哪里可以为我的 C++ 项目找到一个好的 Scope Guard 实现?