|
1
66
不知道是什么
我用GCC做了一些实验。在下面,我们有一个
第二个转换单元只包含同一静态数据成员的另一个隐式实例化
这是我们使用GCC得到的结果——它将每个隐式实例化变成一个弱符号,并将其粘贴到它自己的部分中。当链接时存在多个弱符号时,弱符号不会导致错误。相反,链接器将选择一个实例,并丢弃其他实例(假设所有实例都相同)
所以我们可以看到
这表明它实际上删除了除一个实例之外的所有实例。 |
|
|
2
3
|
|
|
3
1
因为模板代码不是源代码;这是关于如何编写源代码的说明。 非模板静态变量是实际的源代码,编译器将通过两次包含某些内容来尝试完全按照您所说的做。因此,您必须在.cpp文件中初始化静态变量,并且只在描述类的.h文件中引用它。它相当于通过extern声明的全局变量。 当编译器看到
编译器将查看所有模板<&燃气轮机;与Templ关联的代码,并使用它构造.h和.cpp文件(仅在编译期间存在)。这些文件可能如下所示:
成为一个模板。 因此,初始化静态变量的源代码在编译器创建的.cpp文件中只存在一次。 |