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