【发布时间】:2009-11-14 03:21:40
【问题描述】:
我刚刚下载了 STL 源代码,我注意到 STL 模板类的所有定义都包含在 .h 文件中。函数定义的实际源代码位于 .h 文件而不是 .cpp/.c 文件中。这是什么原因?
【问题讨论】:
我刚刚下载了 STL 源代码,我注意到 STL 模板类的所有定义都包含在 .h 文件中。函数定义的实际源代码位于 .h 文件而不是 .cpp/.c 文件中。这是什么原因?
【问题讨论】:
因为很少有编译器实现模板的链接。很难。
这是一篇简短但(我认为)内容丰富的文章:http://www.informit.com/guides/content.aspx?g=cplusplus&seqNum=53
我说“我认为”是因为它确实不是我非常熟悉的东西,只是它广泛未实现。我最初说标准不需要它,但是查看 C++03 中“导出”的定义,我没有看到任何迹象表明它是可选的。也许这只是一个失败的标准。
【讨论】:
将模板视为代码生成。如果您事先不知道将使用什么模板,则无法编译。所以你需要将实现保留在标题中。
这允许一些内联,这解释了为什么有时使用模板化的东西(如 std::sort)比在普通 C 中工作得更快。
【讨论】: