请注意以下事项:
#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是静态的,它只在与类定义相同的函数内部工作,并且在类定义之前。
帮助说服我它没有违反范围规则。为什么可能?这种实施有哪些优点和缺陷?
答案 0 :(得分:5)
因为struct Bar
位于main()的名称空间内,foo
是static
。标准说:
可以在函数定义中定义类;这样的课是 叫一个本地班。本地类的名称是其本地名称 封闭范围。本地类属于封闭范围 范围,并且对函数外的名称具有相同的访问权限 封闭功能。本地类中的声明只能使用 类型名称,静态变量,外部变量和函数,以及 来自封闭范围的调查员。
所以你的代码没有违反标准。