我实现了一个具有静态成员变量的模板,在读取标准后,接缝正确定义.h文件中的变量,但.h文件包含在多个.cpp中,为什么静态变量是不是多重定义?
标准的任何参考?
14.5.1.3在N3376中
可以在命名空间中提供静态数据成员的定义 包含静态成员的类模板定义的范围。 [例如:
template<class T> class X { static T s; };
template<class T> T X<T>::s = 0;
&lt; -------------在这里提问。-end example]
答案 0 :(得分:2)
因为它是一个模板。当您实例化静态成员时,它将被定义,但允许在多个翻译单元中定义隐式实例化。
[basic.def.odr] / 6
类类型(第9章),枚举类型(7.2),带内部链接的内联函数(7.1.2),类模板(第14章),非静态函数模板(14.5)可以有多个定义.6),静态数据成员 类模板(14.5.1.3),类模板的成员函数(14.5.1.1)或模板特化 其中一些模板参数未指定(14.7,14.5.5),在程序中提供了每个定义 出现在不同的翻译单元中,并且定义满足以下要求。