C 中的静态类成员
static class member in c++
我有一个与C 中静态类成员有关的问题。根据我对C 的理解,在创建类实例之前应该存在静态类号码。可以初始化const静态成员变量,但是对于非const静态成员,我们不能在类中初始化它。因此,我的问题是我们应该在哪里初始化非const静态类。在我看来,非const静态类的唯一阶段是在运行主要程序之前,如以下代码所示:
using namespace std;
class C
{
public:
static int Value;
};
int C::Value = 2;
int main()
{
// int C::Value = 2; //ERROR!
cout<<C::Value<<endl;
return 0;
}
还有其他方法可以初始化它吗?谢谢!
C 程序中的非本地对象可以初始化静态和 dymandyally 。简而言之, static 初始化是微不足道的C风格初始化,其常数表达式基本上是在编译时执行的(因此,没有生成代码)。同时,动态初始化是初始化,涉及一些不平凡的动作,这些动作必须在运行时执行。
您可以假设静态初始化对象以已经初始化的状态开始了其寿命。IE。从概念上讲,当您的程序启动时,它们会立即初始化。
当涉及动态初始化时间和顺序时,静态类成员的处理方式与任何其他命名空间距离对象相同。该语言不能保证所有具有静态存储持续时间的对象都是在main
之前初始化的。相反,该语言保证在第一次使用同一翻译单元中定义的任何函数或对象之前,在某个时候初始化了此类静态对象。同一翻译单元中定义的静态对象按定义的顺序初始化。动态初始化规则允许已经提到的"初始化顺序惨败"。
在您的示例中 - 将使用由积分常数表达式初始化的int
对象 - static 初始化。可以肯定地假设此int
对象以已经初始化的状态开始其寿命。
您几乎击中了头上的指甲。
是否在main
之前或之后编写定义都没关系。实际上,除了考虑静态初始化顺序惨败之外,只要您在何处编写它,只要 neparation (即,班级定义中的该行)在哪里可以看到您使用成员,只要您在同一范围内与类定义相同的范围。
- 使用静态成员声明类时遇到问题
- (为什么)我们可以在初始化中将非静态类成员分配给静态变量吗?
- 从相同类型的静态成员进行类内初始化
- 是否通过单元化指针UB访问静态类成员
- 初始化与类类型相同的静态成员(静态初始化顺序问题)
- 从静态成员函数访问私有非静态类变量 - C++
- 在子类中填充静态类成员
- 作为成员的静态类模板实例会导致未解析的外部符号错误
- uninit_member:非静态类成员字段 m_cJobState.bstatus 未在此构造函数中初始化,也不在其调
- uninit_member:非静态类成员m_wszParams未在此构造函数中初始化,也不在它C++中调用的任何函数中初
- 说明通过指针访问非静态类成员函数
- 静态类数据成员的线程安全
- 具有静态成员的类的前向声明
- 枚举不是非静态数据成员或类的基类
- 静态类成员的使用
- 静态类成员不是与 this 指针没有关联吗?
- 使用静态类成员而不是私有字段之间的速度差异是什么?
- 如何在 Visual Studio 中显示模板的静态类成员
- 即使没有析构函数,非静态类成员也会被销毁吗?
- 静态模板函数访问静态类成员