此代码按我想要的方式编译和工作,但为什么呢?
#include <iostream>
class Test {
private:
static bool _inited;
static bool _init() {
std::cout << "init!" << std::endl;
return true;
}
};
bool Test::_inited = Test::_init();
int main(int argc, char** argv) {
}
如果我做了一个我认为不相关的改变:
bool _inited = Test::_init();
它不再编译,给我关于尝试调用私有(private)方法的预期错误。
最佳答案
This code compiles and works the way I want it, but why?
因为在使用它的地方,您是在类范围内操作,作为类的一部分。
如果你写的话也是一样的:
static void Test::foo() {
Test::_init(); // or just _init();
}
这里,函数 foo
显然是类的一部分,因此您可以访问其中的每个 Test
成员(无论是私有(private)的还是公共(public)的)。
您甚至可以删除 Test::
,它是多余的,因为编译器已经在 Test
的范围内查找 _init()
,当 _inited
被初始化时(因为它是 Test
的一部分)。
关于c++ - 为什么在初始化私有(private)静态成员时允许调用私有(private)静态方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41836930/