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
データメンバーを初期化する他の方法はありますか?
ルールは常に次のとおりです。
整数型または列挙型の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;
};