Основная проблема - время сбора, действительно.
Если все включено в единую компиляционную единицу «master», тогда все необходимо перекомпилировать, если вы измените один символ в одном файле.
С другой стороны, полное восстановление будет очень вероятно, будет быстрее, чем если бы вы использовали несколько единиц компиляции (в этом случае, одни и те же заголовки должны быть собраны несколько раз, и компоновщик будет иметь больше работать с одним модулем компиляции, каждый заголовок нужно обрабатывать только один раз, а работа компоновщика довольно тривиальна)
С несколькими файлами .cpp вы можете внести изменения в один из них и только иметь перекомпилировать , что файл.
Но несколько популярных библиотек предназначены только для заголовков. Это определенно жизнеспособно.
Производительность, она должна быть такой же или быстрее. Вы даете компилятору полную видимость по всему вашему коду, что означает, что он может легко оптимизировать вызовы функций и встраивать все, что ему нравится.
И обратите внимание, что вы никогда не должны форсировать компилятор для inline. Ключевое слово inline
(и другие трюки, которые имеют такой же эффект), не сообщают компилятору, что «это должно быть включено». Но, подавляя одно правило определения (ODR), они позволяют включать определение в несколько единиц компиляции, и поэтому для компилятора становится проще встроить , если он захочет сделать это.
Но это означает, что вам не нужно беспокоиться о том, чтобы все было встроено. Компилятор будет только встроить столько, сколько имеет смысл делать.
Это общий трюк, чтобы объединить все исходные файлы в один гигантский исходный файл для сборки релиза ... GCC имеет '-fwhole-program', чтобы обеспечить более радикальную оптимизацию в таком сценарии. Новый '-flto' делает практически то же самое без ручного вмешательства. Не беспокойтесь об этом слишком много и напишите ваши программы, чтобы следующий человек мог понять и продолжить их. –
Ну, технически компилятор наплевать на заголовки и файлы реализации - это файлы C, некоторые из которых содержат декларации и некоторые содержащие определения. Но вложение все не улучшает производительность - есть причина, по которой компиляторы довольно осторожны (например, кластер кеша). – delnan
Какую выгоду вы бы выиграли от этого? –