【发布时间】:2013-08-30 05:11:51
【问题描述】:
// A.h
class A {
public:
static int a;
};
int A::a = 0;
如果我尝试在多个 .cpp 文件中包含 A.h,链接将失败并显示 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 并且我可以在一个 .cpp 文件中分配值 A<int>::a = 100; 并使用 A<int>::a 在另一个文件中获得相同的值。
- 模板何时会产生如此大的影响?
- 这个静态变量是否只有 1 个副本?哪个 .obj 会保留这个变量?
- 构造函数是否只调用一次?如果初始值不同,哪一个胜出?
【问题讨论】:
-
我相信@Alf 的回答也足以回答这个问题。见this
-
另外,@Johannes 也回答了这个问题,see his answer。
-
@Nawaz,你不认为它是重复的吗?
-
是的,我愿意。让我投票赞成关闭。
-
谢谢@Nawaz!我认为stackoverflow.com/questions/1553854/template-static-variable 更好地回答了我的问题。
标签: c++ compilation linker