Должен ли я продолжать включать заголовки в исходный файл, если они уже включены в предварительно скомпилированный заголовок?

Удивительно, но единственный действительно похожий вопрос, который я нашел (Преимущества удаления включений, которые уже находятся в предварительно скомпилированном заголовке ?) только спрашивает о возможном выигрыше во времени компиляции и упоминает о недостатках, но не указывает, в чем они могут заключаться. Есть и другие связанные вопросы, но это касается включения заголовков в заголовки, а не непосредственно в единицы перевода, поэтому я хотел спросить именно об этом.

Учитывать:

precompile.hpp

#ifndef PRECOMPILE_H
#define PRECOMPILE_H

#include <string>
#include <iostream>

#endif // PRECOMPILE_H

precompile.cpp

#include "precompile.hpp"

main.cpp

#include "precompile.hpp"

#include <string>
#include <iostream>

int main()
{
    std::string str = "hello";
    std::cout << str << "\n";
}

Есть ли какие-либо важные рекомендации относительно того, следует ли явно включать в исходный файл предварительно скомпилированные заголовки (в моем примере <string> и <iostream>)?


person Marc.2377    schedule 11.09.2019    source источник


Ответы (1)


Вы можете возразить, что любой исходный файл должен #include выполнять все, от чего он зависит, независимо от того, что было предварительно скомпилировано.

Такой подход упрощает повторное использование кода в других проектах, в которых эти зависимости могут не быть предварительно скомпилированы.

person Sid S    schedule 11.09.2019