LINUX.ORG.RU

История изменений

Исправление annulen, (текущая версия) :

h - прототип Cpp - реализация. Но у меня в h есть логика. Это очень плохо?

У такого подхода есть только один плюс: компилятор сможет инлайнить код из .h по месту использования. Но с этим, как и с любой оптимизацией, нужна осторожность, так как инлайнинг раздувает размер бинарников, а поможет ли он что-нибудь ускорить, зависит от обстоятельств. К тому же если использовать LTO, то ничего выносить в заголовки уже не требуется, т.к. компилятор видит код всего бинарника сразу.

А минусов полно, с некоторыми можно бороться (например, разделить прототипы и реализацию на header.h и header_impl.h), с некоторыми нет (при любом изменении в «логике» придётся перекомпиливать всё, куда инклудится заголовок)

Исходная версия annulen, :

h - прототип Cpp - реализация. Но у меня в h есть логика. Это очень плохо?

У такого подхода есть только один плюс: компилятор сможет инлайнить код из .h по месту использования. Но с этим, как и с любой оптимизацией, нужна осторожность, так как инлайнинг раздувает размер бинарников, а поможет ли он что-нибудь ускорить, зависит от обстоятельств.