请注意以下事项:
#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;
}
该程序的输出是:“我可以看到 main 内部”。
为什么类构造函数可以在类定义之外查找并找到 foo?
如果 foo 是静态的,它只在与类定义相同的函数内有效,并且在类定义之前。
帮助说服我它没有违反范围规则。为什么有可能?这种实现的优点和缺陷是什么?