// A.h
class A {
public:
static int a;
};
int A::a = 0;
複数の .cpp ファイルに含めようA.h
とすると、リンクが .cpp で失敗しmultiple definition of A::a
ます。各 .obj ファイルに含まれているため、これは理にかなっていると思いますA::a
ただし、テンプレートを使用することはできますが、
// A.h
template<class T>
class A {
public:
static T a;
};
template<class T>
T A<T>::a = 0;
複数の .cpp ファイルに含めることができるようになりました。A.h
また、1 つの .cpp ファイルに値を割り当てて、A<int>::a = 100;
.cpp ファイルで同じ値を別のファイルに取得することもできますA<int>::a
。
- テンプレートがそのような違いを生むのはいつですか?
- この静的変数のコピーは 1 つだけですか? この変数を保持する .obj はどれですか?
- コンストラクターは一度だけ呼び出されますか? 初期値が違うとどっちが勝つ?