C++, include или forward-declaration в заголовках

107
07 июня 2021, 18:50

Существует два противоположных мнения, относительно включения одних заголовков в другие.

  1. Подключение заголовков внутри заголовков - это очень плохо. Всегда, когда возможно, должна использоваться предварительная декларация. Это положительно сказывается на времени компиляции. К тому же, в заголовок будет попадать меньше мусора.
  2. Если заголовку нужны другие заголовки, то их следует включать, а предварительное объявление использовать только в самых крайних случаях. Например, для разрыва циклической зависимости заголовков.

Как же поступать правильно?

Идея использования предварительных объявлений казалась мне удачной, пока я не начал сталкиваться с шаблонными типами, а так же с вещами, которые определены через typedef. К примеру, я так и не смог придумать, как сделать предварительное объявление для std::string вместо включения <string>.

Answer 1

ИМХО, первый вариант (копирование предварительных объявлений и прототипов в несколько .cpp файлов) слишком сильно портит качество кода.

Если так нужна скорость компиляции, то если другие (менее радикальные, и более действенные) способы ее поднять:

  • Предкомпилированные заголовки.
  • Более быстрый компилятор, например Clang вместо GCC.
  • Более быстрый линковщик, например LLD вместо LD.
READ ALSO
Разбиение на блоки по битам

Разбиение на блоки по битам

Занимаюсь реализацией алгоритма ГОСТ 28147-89Например, есть ключ 256 бит:

268
Доступ к вложенным элементам из управляющего класса

Доступ к вложенным элементам из управляющего класса

Есть такой код, описывающий вложенные списки:

103
Подсчет вложенных тегов

Подсчет вложенных тегов

Не могу разобраться почему не считает, вроде отладчиком прошелся посмотреть чему равен lidataset

241
Не подключаются стили CSS в проекте на Django

Не подключаются стили CSS в проекте на Django

Всем добрый день! При разработке проекта на Django не удается подключить стили CSSСоздана директория static, где лежат как стили, так и картинки

185