1
4
它完全依赖于编译器实现。大多数编译器都会围绕、内联或类似cpp的文件生成代码,然后用这些代码进行编译。有时,通过优化设置,一些编译器甚至会重用相同的代码,而不是为每个cpp重新创建它。 所以你必须查看你的编译器的文档来获得更多的细节。 |
2
3
是的,模板函数代码在
当相同的模板实例化(例如
|
3
1
模板代码 是 即使它从未被实例化,也会被编译。否则,不需要编译器对此发出诊断:
模板编译发生在 两相 . 除了基本检查之外,依赖于模板参数的所有内容都只能在实例化模板并用实际类型填充形式参数时进行检查。例如,这里
|
4
0
你的意思是实例化的,而不是编译的。在编译时,编译器会找出代码使用的每个版本,并(在对象文件中)设置所有必需的版本。 |
5
0
它总是内联的(意思是,它总是内部链接,具有内联语义)。它实际上可能根本就不是内联的,就像内联函数一样,但是模板不是代码。它是一个“代码模板”。因此,它通常位于头文件中,特殊情况除外,见下文。 有一个想法,使其他东西,代号为“导出关键字”。它已从标准中删除。 特殊情况:可以编译 模板实例化 放入一个对象文件中,而不使用它们。这是避免所有模板代码内联的唯一方法。 就是这样做的:
这将强制编译器在当前位置实例化模板。C++ 0x将有一个强制编译器的语法 不 要执行此操作,并让链接器在其他地方搜索模板实例化:
|
George S. · 是否存在基于元组的控制流语句内部表示? 6 年前 |
FlatAssembler · 在x86程序集中计算exp(x) 6 年前 |
cib · 即时编译和动态编译有什么区别? 7 年前 |
Artemis · 寄存器与指令之间的差异 7 年前 |
Sam · 了解go工具编译和链接命令 7 年前 |