6
A
回答
4
模板代码必须被视为另一种语言来生成C++代码。
在这种思维方式中,模板化代码必须被解析,执行,然后编译器才能生成必须添加到当前单元文件中的C++代码,然后我们才能编译整个C++代码。
我听说并非所有的编译器都这样做,但这是主要思想,并且假设在编译代码之前还有很多事情要做,因为一些代码必须先生成。
1
部分答案在你的问题中。您无法观察包含模板的头文件,因为完整的实现必须包含在每个使用它们的编译单元中。
12
C++中一般是缓慢的古代,因为编译包括机制,使编译器递归重新解析其所有声明和定义每一个头和所有随机配备每一个翻译单元。
模板只是建立在该“功能”上。但是它们要求所有代码也处于标题中,迫使编译器也重新解析包括的所有模板的所有实现。
1
想想现实世界的模板是什么 - 它不是一个实际的东西,而是关于如何构建实际事物的方向。
对于C++模板,头文件不包含实际的,例如, '向量',但是如何建立一个vector
。每次我们构建一个源文件时,编译器必须编译新的vector
代码,如果我们用不同的模板参数实例化vector
,可能需要多次。
每个源文件的构建都是独立的,并且不知道您是否已经为另一个源文件构建了vector
,因此它每次都构建一个新文件。
相关问题
- 1. 模板,什么是编译
- 2. 为什么最简单的模板模板不能编译?
- 3. 为什么MinGW很慢?
- 4. 为什么babel transpilation很慢?
- 5. 为什么ODBC很慢?
- 6. 为什么lockCanvas()很慢?
- 7. 为什么boost :: function很慢?
- 8. 为什么方法很慢?
- 9. 为什么C#Parallel.Invoke很慢?
- 10. 为什么dataframe.values很慢
- 11. 为什么GHC很难编译?
- 12. 编译C#脚本很慢
- 13. 什么是javascript模板预编译?
- 14. 为什么在编写模板时会编译?
- 15. 什么是编译模板和/或编译模板的正确过程?
- 16. django:为什么在模板中获取模型的.id字段很慢?
- 17. 为什么编译会导致缺少模板参数错误?
- 18. 为什么这个模板函数能够成功编译?
- 19. 为什么用constexpr函数模板不会在编译时
- 20. 此模板示例代码为什么不编译?
- 21. 为什么没有这个模板函数编译?
- 22. 为什么'外联行'模板不能编译?
- 23. 为什么编译器生成的模板函数
- 24. 为什么MSVC无法编译这个模板函数?
- 25. 为什么这样编译,模板扣除应该失败?
- 26. 为什么此模板变量会导致编译器警告?
- 27. 为什么编译器不提供默认的operator =模板类?
- 28. 这段代码为什么编译? (C++模板问题)
- 29. 为什么这个函数不带编译模板参数?
- 30. 为什么不能编译这个C++模板代码?
当您对前几次回答投票时,会弹出一个框,要求您解释为什么您这样做。过了一段时间,这不再发生。然而,那并不是因为你不应该再解释回票,而是因为那时你必须知道。大胆地说:__你应该还是解释你为什么投票弃权.__ – sbi 2010-09-03 09:54:35
不确定,但也许是一个C粉丝来过并且认为“古代包含机制很好,C编译得足够快” – jalf 2010-09-03 09:56:33
预编译头文件帮助解决这个问题问题 - 您可以预编译整个STL,以便在编译项目时仅解析一次。 – AshleysBrain 2010-09-03 10:28:35