为什么在初始化私有静态成员时允许调用私有静态方法?

MK。

这段代码可以按照我想要的方式进行编译和运行,但是为什么呢?

#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();

它不再编译,这给了我有关尝试调用私有方法的预期错误。

罗汉·巴蒂亚(Rohan Bhatia)

答案很简单。当你写

bool Test::_inited = Test::_init();

这意味着Test类的私有静态变量的值等于_init()函数返回的值。这是完全有效的,因为您没有尝试从其作用域之外访问私有功能。Class_Name ::前缀将它们放入类中。它们只是不在类声明中。因此在某种程度上就像将整个语句放在类中一样。

现在当你写

bool _inited = Test::_init();

_inited变量与Test类不同。因此,它从类的私有数据方法中获取其值,除非将getter函数用于分配,否则该方法是禁止的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

初始化类的静态常量成员,其中成员是私有类型?

在cpp文件中初始化私有静态成员变量。错误:成员是私人的

GCC允许访问私有静态成员

声明/初始化私有嵌套结构的静态成员

如何在C ++中初始化私有静态成员?

使用私有构造函数进行静态初始化

C ++中的静态构造函数?我需要初始化私有静态对象

为什么静态方法可以访问私有数据?

为什么灵活数组成员的静态初始化有效?

在具有私有构造函数的类中初始化静态变量

在初始化私有静态变量时使用 getClass() 进行同步是个坏主意吗?

私有静态成员函数与私有成员函数

如何从自动装配服务初始化私有静态最终版

如果未初始化“私有静态 int”实例变量,它是否等于零?

在 C++ 中初始化模板类私有静态变量

C ++私有结构和非静态const变量初始化

为什么静态字段没有及时初始化?

在类外初始化一个私有静态字段(这里是private的意思)并调用静态函数

使用私有静态方法

为什么我不能在类定义中直接初始化私有成员变量

实例初始化器与私有成员

初始化类的私有成员变量

PowerMock访问私有静态成员

基类的私有静态成员

私有类型的静态常量成员

为什么Java 8接口中不允许使用“私有静态”字段?

初始化静态成员使编译工作...但是为什么

为什么C ++允许返回对私有成员的引用

为什么我不能在类/静态方法中使用私有的、内部的、文件私有的方法?