请注意以下事项:
#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;
}
Run Code Online (Sandbox Code Playgroud)
该程序的输出是:"我可以在主内部看到".
为什么类构造函数可以在类定义之外查找并找到foo?
只有当foo是静态的时,它才能在与类定义相同的函数内部工作,并且在类定义之前.
帮助说服我,它没有违反范围规则.为什么可能?这种实施有哪些优点和缺陷?
因为struct Bar它位于main()的命名空间foo内static.标准说:
可以在函数定义中定义类; 这样的类叫做本地类.本地类的名称是其封闭范围的本地名称.本地类位于封闭范围的范围内,并且对函数外部的名称具有与封闭函数相同的访问权限.本地类中的声明只能使用类型名称,静态变量,外部变量和函数以及封闭范围内的枚举器.
所以你的代码不违反标准.
| 归档时间: |
|
| 查看次数: |
296 次 |
| 最近记录: |