C++ 模板的目标代码是否在可执行文件和动态库中重复?

Is the object-code of C++ templates duplicated in executables and dynamic libraries?

库使用模板 class TemplCls<TArg>,linked 可执行文件也使用它。现在,如果相同最终二进制文件(库或可执行文件)的两个源文件使用具有相同参数的模板,则只会保留模板的一个实例化。

如果动态库和可执行文件都使用模板会怎样?由于可执行文件的 linker 将(通常)收到动态库的 link 终端选项,它是否还会记住模板已经在库本身中实例化,因此,不需要,实例化成可执行文件?

What will happen if the dynamic-library and the executable both use the template?

每个人都将获得所使用的每个模板方法的副本。

你不需要这个问题,你可以看看(在未剥离的二进制文件中):

nm -AC a.out foo.so | grep TemplCls