// A.h
class A {
public:
static int a;
};
int A::a = 0;
如果我尝试包含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;
我现在可以包含A.h
在多个 .cpp 文件中,也可以A<int>::a = 100;
在一个 .cpp 文件中分配值,并在另一个文件中使用 .cpp 获得相同的值A<int>::a
。
- 模板何时会产生如此大的不同?
- 这个静态变量是否只有 1 个副本?哪个 .obj 会保留这个变量?
- 构造函数是否只调用一次?如果初始值不同,哪一个获胜?