为什么不重复定义成员变量?

时间:2015-09-02 12:59:31

标签: c++ standards

我实现了一个具有静态成员变量的模板,在读取标准后,接缝正确定义.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]

1 个答案:

答案 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),在程序中提供了每个定义   出现在不同的翻译单元中,并且定义满足以下要求。