在C ++(98、11和14)中初始化静态数据成员的正确方法是什么?

Bodacydo

static在C ++中初始化数据成员的正确方法是什么我也对它从C ++ 98到C ++ 11到C ++ 14的变化感兴趣。

这是一个例子:

// bufferedOutput.h
class BufferedOutput
{
 // Static member declaration.
 static long bytecount;
};

// bufferedOutput.cpp
long BufferedOutput::bytecount = 50;

还有其他初始化static数据成员的方法吗?

哥伦布

规则始终如下:

  • const可以使用常量表达式在类中初始化整数或枚举类型静态数据成员(SDM)。

  • constexprSDM必须类被初始化以恒定表达。

    当默认构造函数初始化每个成员时,C ++ 17不再需要初始化程序。同样,constexprSDM是隐式内联变量,这使它们的声明成为定义(现在不赞成使用外部定义)。

  • 其他类型的SDM可以在其定义中包含一个初始化程序(如果声明了SDM,则在类中inline)。

对于在两种语言中均有效的代码,C ++ 03和C ++ 11 +之间没有任何实质性的变化。

请注意,对于非内联的SDM,类内声明不是定义(无论是否提供了初始化程序),并且必须在使用它们的情况下进行定义。

从C ++ 17开始,我们可以使您的SDM内联,从而使其类内声明成为定义:

class BufferedOutput
{
  static inline long bytecount = 50;
};

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在C ++中初始化变量的正确方法是什么

Eigen中的C ++静态数据成员初始化错误

C ++静态数据成员初始化

c ++ 11中的类成员初始化正确完成

如何在C ++ 11中正确初始化数据成员?

在C ++对象中初始化数据成员的正确顺序

类C ++的静态函数成员中的静态数据成员的初始化顺序

在C中创建和初始化包含函数指针的结构的正确方法是什么?

在 C++ 中初始化指向结构的指针的正确方法是什么?

抱歉,未实现:使用C ++ 11的非静态数据成员初始化器

是否可以在C ++中的类的静态方法中初始化静态成员?

c ++:初始化成员结构的静态字段的正确方法

如何在c ++ 11中初始化std :: vector <std :: string>的静态constexpr成员?

为什么在C ++ 11 / C ++ 14中针对自动和支撑初始化程序有特殊的类型推导规则?

具有非静态成员初始化程序的类的C ++ 11聚合初始化

调用静态成员的方法以在C ++中进行初始化

C ++ 14中的聚合成员初始化

在C ++中初始化静态字符串成员

非静态数据成员初始化器仅与-std = c ++ 11或-std = gnu ++ 11一起提供

在C ++ 98中初始化结构数组的优雅方法

C ++ 11 / C ++ 14中的自动和括号初始化

静态订单初始化失败,iostream和C ++ 11

c ++对象中静态变量的默认初始化值是什么?

C ++ 98中的容器初始化

C ++正确的指针成员初始化

c ++ 11:枚举成员初始化

在C ++ 14中初始化唯一指针向量的正确方法

在C ++ 11中非平凡初始化模板类的静态成员而没有clang警告

在 C++11/17 中的类初始化和直接初始化中。有什么区别?