为什么本地类定义可以从同一个函数访问外部静态变量?

时间:2012-11-17 03:35:56

标签: c++ static

请注意以下事项:

#include <iostream>
#include <string>
#include <cstdlib>

int main(){

    static std::string foo = "inside main";

    struct Bar{
        Bar(){
            std::cout << "I can see " << foo << '\n';
        }
    };

    Bar b;

    return EXIT_SUCCESS;
}
  

该程序的输出是:“我可以在主内部看到”。

为什么类构造函数可以在类定义之外查找并找到foo?

如果foo是静态的,它只在与类定义相同的函数内部工作,并且在类定义之前。


帮助说服我它没有违反范围规则。为什么可能?这种实施有哪些优点和缺陷?

1 个答案:

答案 0 :(得分:5)

因为struct Bar位于main()的名称空间内,foostatic。标准说:

  

可以在函数定义中定义类;这样的课是   叫一个本地班。本地类的名​​称是其本地名称   封闭范围。本地类属于封闭范围   范围,并且对函数外的名称具有相同的访问权限   封闭功能。本地类中的声明只能使用   类型名称,静态变量,外部变量和函数,以及   来自封闭范围的调查员。

所以你的代码没有违反标准。