サーチ…
前書き
インライン変数は、 1つの定義ルールに違反することなく、複数の翻訳単位で定義することができます。多重定義されている場合、リンカはすべての定義を最終プログラムの単一のオブジェクトにマージします。
クラス定義に静的データメンバーを定義する
inline
で宣言されている場合、そのクラスの静的データメンバーはクラス定義内で完全に定義できます。例えば、次のクラスをヘッダに定義することができます。 C ++ 17より前には、 .cpp
ファイルを提供してFoo::num_instances
定義を格納する必要がありました。これは、一度だけ定義されるようになっていましたが、C ++では、inline変数Foo::num_instances
すべて同じint
オブジェクトを参照します。
// warning: not thread-safe...
class Foo {
public:
Foo() { ++num_instances; }
~Foo() { --num_instances; }
inline static int num_instances = 0;
};
特殊なケースとして、 constexpr
静的データメンバーは暗黙的にインラインです。
class MyString {
public:
MyString() { /* ... */ }
// ...
static constexpr int max_size = INT_MAX / 2;
};
// in C++14, this definition was required in a single translation unit:
// constexpr int MyString::max_size;
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow