Для компилятора нет разницы между входными данными, которые поступают из файла .cxx или файла .h, этот текст компилируется в одну и ту же единицу перевода.
Основная причина, по которой мы обычно , а не помещаем код в файлы заголовков, состоит в том, чтобы избежать дублирования объектов, которые затем конфликтуют на уровне компоновщика, когда данный заголовок используется несколькими .cxx файлы.
Возможно, вы путаете встроенные функции с макросами, поскольку в случае макросов, которые по сути являются директивой предварительной обработки, нет риска возникновения конфликтов компоновщика во времени, даже если / если одни и те же заголовки включены несколько раз для разные единицы перевода.
Разумеется, можно определять функции в заголовках (или в других местах) таким образом, который инструктирует компилятору систематически включать вызовы функции, и в таких случаях также нет конфликта во время соединения. Однако для этого требуется специальный синтаксис, и это просто подразумевается тем фактом, что код поступает из включаемого файла или файла cpp (как предполагает вопрос).
Теперь, чтобы ответить на вопрос, по сути, перемещение всего этого кода из заголовочных файлов в файлы cpp не должно сильно влиять ни на размер двоичного файла, ни на производительность.
По-видимому, если определения функций в заголовочных файлах не были указаны явно, для каждого созданного exe / dll должен быть только один пользователь заголовочного файла (в противном случае во время компоновки были бы дубликаты), и, следовательно, файл не изменился бы. в любом направлении.
Что касается производительности, то с общим приростом производительности в аппаратном обеспечении, даже если функции, которые ранее были встроены, теперь должны вызываться нормально, это должно происходить в целом незамеченным, с точки зрения производительности, за исключением, возможно, определенных узких циклов, где логика повторяется очень раз.