这段代码可以按照我想要的方式进行编译和运行,但是为什么呢?
#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();
它不再编译,这给了我有关尝试调用私有方法的预期错误。
答案很简单。当你写
bool Test::_inited = Test::_init();
这意味着Test类的私有静态变量的值等于_init()函数返回的值。这是完全有效的,因为您没有尝试从其作用域之外访问私有功能。Class_Name ::前缀将它们放入类中。它们只是不在类声明中。因此在某种程度上就像将整个语句放在类中一样。
现在当你写
bool _inited = Test::_init();
_inited变量与Test类不同。因此,它从类的私有数据方法中获取其值,除非将getter函数用于分配,否则该方法是禁止的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句