问题涉及由 Visual Studio 编译器创建的 .pch 二进制文件的内容。它包含什么?它只是头文件的解析树,还是目标代码?
考虑这个例子:
// myheader.h
#include <vector>
class A {
public:
void add(int i) { v.push_back(i); }
private:
std::vector<int> v;
};
在要预编译的集合中包含此标头会导致 vector<int> 的完整模板实例被编译并添加到 .pch 中吗?
提供更多背景信息;如果只预编译解析树,这意味着实例化模板的目标代码仍将在每个编译单元创建一次,从而增加编译和链接时间。因此,即使启用了预编译头文件,“统一构建”/减少编译单元仍然是减少构建时间的一个相关因素。