Ответ 1
Быстрый ответ: заголовки STL и Boost действительно принадлежат к предварительно скомпилированному файлу заголовка, хотя эти файлы заголовков определяют классы шаблонов.
При создании предварительно скомпилированного файла заголовка компилятор анализирует текст заголовка (значительную задачу!) и преобразует его в двоичный формат, оптимизированный для выгоды компилятора.
Даже если классы шаблонов будут созданы, когда будут скомпилированы другие .cpp файлы, они будут созданы из информации в предварительно скомпилированном заголовке, что значительно быстрее для компилятора.
(позднее добавление)
Одна вещь, которую вы должны not включить в предварительно скомпилированный заголовок, - это файлы, которые являются частью вашего проекта и часто меняются, даже если каждый файл .CPP содержит эти файлы.
Причина в том, что генерация предварительно скомпилированного заголовка может занять много времени, потому что библиотеки boost, stl и windows очень большие.
У вас может быть простой файл (например, "StringDefs.h" ), который все использует. Если StringDefs.h включен в stdafx.h, а один разработчик касается StringDefs.h, то каждый разработчик должен дожидаться перекомпиляции цельного прекомпилированного заголовка. Это было бы намного быстрее, если StringDefs.h был оставлен вне предварительно скомпилированного заголовка и проанализирован вместе с каждым .CPP файлом.