c++ - 为什么在初始化私有(private)静态成员时允许调用私有(private)静态方法?

标签 c++

此代码按我想要的方式编译和工作,但为什么呢?

#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/

相关文章:

c++ - if 语句和 --variable

c++ - clang:如何在 OS X 中进行分析时获取源信息

c++ - 为什么代码不能返回正确的值?

c++ - QGraphicsItem 边框样式

c++ - 这个围绕 std::future::then 的便利包装器有名称吗?

c++ - 自上而下的伸展树(Splay Tree)的 makeEmpty() 的时间复杂度

c++ - 打印小于 100 的质数

c++ - 为什么 const QString& param 返回指向数据的错误 const char* 指针

c++ - 通过类引用访问和改变 vector

c# - 相机校准和预测屏幕上的眼睛焦点 OpenCV/EmguCV