Нормально ли включать в оба файла одну и ту же библиотеку?
Да.Обычно заголовок включается в несколько файлов.
Всякий раз, когда вы используете объявление из заголовка, вы должны включить этот заголовок.Если вы используете std::string
в test.h
, то вы должны включить <string>
в test.h
.Если вы используете std::string
в test.cpp
, то вам следует включить <string>
в test.cpp
.Будет ли <string>
включен в один из заголовков, включенных в test.cpp
, не имеет значения, и на это не следует полагаться.
Приведет ли это к дублированию кода, если #ifndef
не используется?
Если заголовок не имеет защиты заголовка, то включение его несколько раз действительно приведет к дублированию его содержимого, да.
илипрепроцессор достаточно умен, чтобы игнорировать его.
Препроцессор не игнорирует никаких включений.Каждое включение будет обработано.Препроцессор может быть достаточно умным, чтобы оптимизировать включение заголовка, который, как он знает, будет пустым из-за включения защиты.