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

Tre*_*key 3 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;
}
Run Code Online (Sandbox Code Playgroud)

该程序的输出是:"我可以在主内部看到".

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

只有当foo是静态的时,它才能在与类定义相同的函数内部工作,并且在类定义之前.


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

Nik*_* C. 5

因为struct Bar它位于main()的命名空间foostatic.标准说:

可以在函数定义中定义类; 这样的类叫做本地类.本地类的名​​称是其封闭范围的本地名称.本地类位于封闭范围的范围内,并且对函数外部的名称具有与封闭函数相同的访问权限.本地类中的声明只能使用类型名称,静态变量,外部变量和函数以及封闭范围内的枚举器.

所以你的代码不违反标准.