Как простое правило, вам нужно определять символы каждый раз, когда требуется их выравнивание, интерфейс или размер.Если заголовок ссылается только на тип в качестве указателя, вам нужно только объявить его.
Все блоки компиляции, которые ссылаются на заголовок, должны пройти через этапы его самостоятельного понимания.Вот почему код в заголовке увеличивает время компиляции суперлинейно.
Вы можете точно увидеть, что препроцессор готовит для компилятора, если вам это интересно.GCC имеет следующий синтаксис.
g++ -E main.cpp
MSVC обладает аналогичной функциональностью, хотя я не могу ее процитировать.
Я легко могу включить Bh в main.cpp, но мне интересно, действительно ли это необходимо, потому чтоЯ уже включаю Ах, а в Ах я включаю Bh
Это вопрос обстоятельств, я полагаю.Основное раздражение при пропуске заголовков заключается в том, что обычно происходит что-то, когда кто-то меняет что-то в разрозненной части базы кода, и вам приходится догадываться, почему вы пропускаете символы при обновлении из системы контроля версий.По сути, вы создаете зависимости между заголовками, которые вообще не ясны.
Если бы мои прихоти были законны, вы могли бы бросить include для любого заголовка в пустом файле cpp, и он просто скомпилировался бы.Я не понимаю, почему вы этого не хотите, хотя я не готов защищать это как правильное решение во всех ситуациях.