3

请注意以下事项:

#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 是静态的,它只在与类定义相同的函数内有效,并且在类定义之前。


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

4

1 回答 1

5

因为struct Bar在 main() 的命名空间内并且foostatic. 标准说:

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

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

于 2012-11-17T03:40:02.643 回答