LINUX.ORG.RU

hpp vs cpp

 ,


0

2

Привет! Вот вброс. какие есть за и против писать все в заголовочных файлах, с шаблонами и без, и писать, использую *.cpp файлы. (ну я хочу поднять эту тему у себя, вот готовлюсь.)

если это тут возможно, изменю это сообщение и добавлю, ответы. пока что так

hpp подход

  • + ускоряет компиляцию
  • + дает возможность компилятору проверять код
  • + не нужна система сборки

cpp подход

  • - замедляет сборку
  • - обязывает иметь систему сборки, если проект не тривиален
  • - пряет определения функций от компилятора, что выключает полезные варнинги и оптимизаии

Ответ на: комментарий от slovazap

Речь, очевидно, о коде который может находиться как в заголовочных файлах так и в cpp и вопрос как делать лучше.

Если инклюдить все, то любой код может находиться где угодно.

Кстати, код с локальным скоупом - это ещё один поинт против .h,

«против .h» – это «против разбиения проекта на разные .cpp»?

потому что тогда TU будет один и всё будет в одном скоупе.

И? Проблема-то в чем?

Я, кстати, могу и поинтов «за» накидать. Например, при одном TU невозможно нарушить ODR.

Ты же даже конкретное место в нём указать не можешь.

Ты неспособен на этой странице найти [dcl.dcl]?

Siborgium ★★★★★
()
Ответ на: комментарий от bugfixer

Давайте сначала договоримся согласны ли Вы со следующим:

Да, я согласен. Если это не так – будет любопытно посмотреть на выкладки.

Теперь жду ответ на мой вопрос. Если что, меня не волнует математическое обоснование, а волнует доказательство корректности ваших рассуждений.

Siborgium ★★★★★
()
Последнее исправление: Siborgium (всего исправлений: 1)
Ответ на: комментарий от Siborgium

Да, я согласен. Если это не так – будет любопытно посмотреть на выкладки.

Не думал что эта тема снова всплывёт. На самом деле утверждение ложно: можно показать что оно справедливо если «соревноваться» с N*log(N) (ie просто N - не хватает).

А в контексте раздельной компиляции это фундаментально - это означает что рано или поздно скомпилировать M кусочков размера N/M становится дешевле если «цена» компиляции выше O(N*log(N)), даже если это делать «в однопотоке». Это с точки зрения теории.

А с точки зрения практики - время инкрементальных билдов (и возможность их параллелить) - это то что народ заботит больше всего. И вот здесь стратегия «все засовываем в один TU» сливает по полной. Или это не очевидно?

bugfixer ★★★★★
()