为什么模板编译速度如此之慢?

Ric*_*ian 6 c++ templates code-generation compilation

大型模板项目的编译速度很慢,STL是其中的主要罪魁祸首,这似乎来自于经验证据.但是,为什么编译速度慢?

我之前通过观察头部包含和组合编译单元来优化构建,但我不明白为什么模板库的编译速度非常慢.

sbi*_*sbi 17

由于古老的包含机制,C++通常编译速度很慢,这会导致编译器递归地重新解析每个标头及其所有声明和定义以及每个转换单元所包含的所有标头.

模板只是建立在"功能"的基础之上.但是它们也要求所有代码都在头文件中,迫使编译器也重新解析所有包含的模板的所有实现.

  • 当您在前几次向下投票时,会弹出一个框,要求您解释为什么这样做.过了一会儿,这种情况不再发生了.然而,这不是因为你不应该再解释下来的选票,而是因为那时候你需要知道这一点.大胆地说:__你仍然应该解释为什么你投票.__ (6认同)

Kla*_*aim 5

模板代码必须作为另一种语言来生成 C++ 代码。

按照这种思路,模板化的代码要经过解析、执行,然后编译器才能生成C++代码,添加到当前单元文件中,然后我们就可以编译整个C++代码了。

我听说并非所有编译器都完全这样做,但这是主要思想,并且假设在真正编译代码之前发生了更多事情,因为必须首先生成一些代码。