9

假设我声明了一个模板,但从未在 C++ 中引用它。编译器是否在可执行文件中对它做任何事情?它是否占用任何进程内存?

4

2 回答 2

14

不,不会为从未实例化的函数模板生成任何代码。此外,不会为从未调用的类模板的非模板成员函数生成任何代码。

特别是,您的可执行文件的大小不会变大,也不会发生任何运行时开销。

于 2013-06-25T18:57:10.397 回答
4

不,不是的。

模板类和函数不是实际的类或函数:它们是编译器如何生成某些类型的类和函数的指示。当您引用模板时,编译器使用模板来确定如何生成源代码,并为模板的每个不同参数化编译生成的代码。

使用模板的唯一开销是一点额外的编译时间,对于 1980 年代之后任何时间构建的任何计算机来说都没什么大不了的。

于 2013-06-25T19:03:06.610 回答