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