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)。
甲constexpr
SDM必须类被初始化以恒定表达。
当默认构造函数初始化每个成员时,C ++ 17不再需要初始化程序。同样,constexpr
SDM是隐式内联变量,这使它们的声明成为定义(现在不赞成使用外部定义)。
inline
)。对于在两种语言中均有效的代码,C ++ 03和C ++ 11 +之间没有任何实质性的变化。
请注意,对于非内联的SDM,类内声明不是定义(无论是否提供了初始化程序),并且必须在使用它们的情况下进行定义。
从C ++ 17开始,我们可以使您的SDM内联,从而使其类内声明成为定义:
class BufferedOutput
{
static inline long bytecount = 50;
};
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句