問題は、Visual Studio コンパイラによって作成された .pch バイナリの内容に関するものです。何が含まれていますか?ヘッダー ファイルの解析済みツリーのみですか、それともオブジェクト コードですか?
次の例を検討してください。
// myheader.h
#include <vector>
class A {
public:
void add(int i) { v.push_back(i); }
private:
std::vector<int> v;
};
プリコンパイルされるセットにこのヘッダーを含めると、コンパイルされて .pch に追加される vector<int> の完全なテンプレート インスタンス化が発生しますか?
もう少し文脈を与えるために; 解析ツリーのみがプリコンパイルされている場合、これは、インスタンス化されたテンプレートのオブジェクト コードがコンパイル ユニットごとに 1 回作成され、結果としてコンパイルおよびリンク時間が増加することを意味します。したがって、「ユニティ ビルド」/コンパイル ユニットの削減は、プリコンパイル済みヘッダーが有効になっている場合でも、ビルド時間を短縮する上で重要な要素となります。