在C ++中初始化static
数据成员的正确方法是什么?我也对它从C ++ 98,C ++ 11到C ++ 14的变化感兴趣。
以下是一个例子:
// bufferedOutput.h
class BufferedOutput
{
// Static member declaration.
static long bytecount;
};
// bufferedOutput.cpp
long BufferedOutput::bytecount = 50;
是否有其他方法可以初始化static
数据成员?
答案 0 :(得分:35)
规则一直如下:
可以使用常量表达式在类中初始化整数或枚举类型的const
静态数据成员(SDM)。
必须在类中使用常量表达式初始化constexpr
SDM。
C ++ 17不再需要初始化程序。此外,constexpr
SDM是隐式内联变量,这使得它们的声明成为一个定义(现在不推荐使用外部定义)。
inline
,则在类中)。对于在两种语言中都有效的代码,C ++ 03和C ++ 11 +之间没有任何实质性的变化。
请注意,对于非内联的SDM,类内声明不是定义 - 无论是否提供了初始化程序 - 如果它们使用了odr,则必须定义它们。
从C ++ 17开始,我们可以使您的SDM内联,这使得它的类内声明成为一个定义:
class BufferedOutput
{
static inline long bytecount = 50;
};