静态成员变量
Static member variables
我开始使用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 访问变量
相关文章:
- C++:是否可以使用非静态成员变量模板?
- 如何在复杂继承中访问静态成员变量
- 静态成员变量不会由 gettext 转换
- 未使用的C++未优化的静态成员函数/变量
- 为什么我不能像这样在静态成员函数中调用静态成员变量?
- C++ lambda - 捕获静态成员变量
- 多线程处理中的静态成员变量
- 纯标头库中静态成员变量的正确设置器和 getter
- 如何从具有专用化的类模板定义静态成员变量?
- 从静态成员函数访问私有非静态类变量 - C++
- 静态变量与静态成员
- 为什么可以在没有实例变量的情况下访问静态回调方法中的静态成员变量?
- 声明和定义类静态成员变量不会导致多重声明,这是为什么?
- 为什么不允许静态成员变量的初始化在类中,而允许静态静态成员的初始化
- 类中的静态成员变量和C++中的全局变量有什么区别?
- 获取 constexpr 全局变量(不是静态成员)的链接器符号
- C++ 静态成员变量 - 文件之间的访问
- 将非静态成员函数C 的使用无效,而将成员功能作为函数变量
- 如何在运行时使用静态成员函数初始化静态成员变量
- 如何在类静态成员中引用静态变量?