静态成员变量

Static member variables

本文关键字:变量 静态成员      更新时间:2023-10-16

我开始使用c++进行面向对象编程,并且遇到过静态成员变量。

在我的特殊情况下,我的头文件(Class.hpp)中有以下内容:

private:
    const static string DEFAULT_PATH;
    static string path;

这并不重要,但它和任何例子一样有效。

所以,要做适当的初始化,我必须做一些研究,发现这不能在类主体中完成,必须在源(class .cpp)文件中完成。在我的源文件中,我添加了:

const string Class::DEFAULT_PATH = "./";
string Class::path = DEFAULT_PATH;

我发现这是违反直觉的,但我试着去处理它。然后我想:

  • 编译器到底什么时候调用这个初始化代码?我如何假设这些字段何时有值?我真的不明白那里发生了什么,我想知道。

  • 最让我感兴趣的是:当包含class.hpp时,我可以在Class.cpp中看到哪些符号?为什么这些声明要在类体之外的另一个文件中?

    静态成员在main启动之前被初始化,所以它们在main中已经初始化了。类的非静态成员在构造函数中初始化。
  • 如果你想强制初始化顺序(这是因为一个变量引用了另一个变量),你可以使用函数来初始化函数的c++静态初始化顺序。
  • boost::call_once(或其c++11等效)可以帮助您实现这一点。http://www.boost.org/doc/libs/1_31_0/libs/thread/doc/once.html
  • 标准告诉你必须在类定义之外的某个地方进行初始化,所以通常你在cpp文件
  • 中进行初始化。
  • 完成后,您可以使用Class::static_member
  • 访问变量