重复的c ++模板实例化

Gui*_*e07 13 c++ templates

编译器是否可以跨多个翻译单元复制同一模板的实例化?

例如,如果你有一个使用std:vector<int>函数内部的a.cpp,而b.cpp使用同样的东西,那么std::vector<int>在最终的二进制文件中有两次冒险吗?

sha*_*oth 8

这可能在项目编译时发生,因此不同的.obj文件将具有相同实例化的副本.当链接二进制文件时,链接器将消除实例化的所有冗余副本,因此结束二进制文件将只有一个副本.


Xeo*_*Xeo 8

正如sharptooth所说,最终的二进制文件只包含一个实例.但是每次在编译单元中遇到模板时,模板仍然会被实例化.如果你想要一些编译速度,在C++ 0x中我们得到extern templates.它像普通extern变量一样工作,因为它必须在至少一个编译单元中指定,但编译器不会在此单元中实例化模板.有关更多信息,请参见此处本草案(14.7.2 [temp.explicit]).