当某些C++实体(如结构,类或函数)被声明为模板时,为所述实体提供的定义仅为必须实例化的蓝色打印。C++模板:模板实例是内联的吗?性能有缺点吗?
由于模板实体必须在声明时定义(通常是头文件),所以我有这个概念,我试图说服自己是错的,当模板实例化后,它会由编译器内联。我想问问这是否是这样?
此question的答案引起了我的怀疑,当我读到的段落:
“模板可导致慢编译时间和可能更大 可执行文件,尤其是年纪较大的编译器。”
由于模板必须实例化,但为什么“可能更大的可执行文件”更慢,编译时间更慢?这应该以什么方式解释?我应该把它解释为'许多函数是内联的',或者'如果有很多模板实例化,可执行文件的大小就会增加,这就是同一个模板被很多不同的类型实例化,这会导致同一个实体的多个副本出现' ?
在后一种情况下,较大的可执行文件大小是否会导致软件运行速度较慢,因为需要将更多代码加载到内存中,这会导致代价很高的分页?
此外,由于这些问题也有些依赖于编译器,所以我对Visual C++编译器感兴趣。关于大多数编译器所做的一般性回答也提供了良好的洞察力。
预先感谢您。
您可以拥有更多代码的一个原因是每个模板类型都是它自己的类型。所以你所有的'Foo'的代码必须重复'Foo ' –
NathanOliver
@NathanOliver好吧,正如我现在所了解的,最新的链接器实现(g ++ 5.x)能够合并相同的生成的实例化代码。 –
@πάνταῥεῖ你能提供一个链接吗?这听起来很有趣。 – bolov