Просто добавьте 2 вещи к другим ответам, помните, что inline - это не порядок, это скорее предположение о том, что должен делать компилятор, если только вы не заставите inline. Большинство компиляторов могут решить, когда встроить функцию, даже если вы не объявили ее встроенной. Это не должен , это должен .
Иногда вам действительно необходимо включить такие определения функций / структур / классов в заголовок, а иногда они не являются тривиальными или такими простыми. Но эти определения, как правило, являются необходимыми вспомогательными функциями, и вы просто не хотите включать их в основной файл, просто для лучшей организации.
Лучшие примеры, которые я когда-либо видел (хорошо, и я их не видел) об этой практике, - исходный код игры (это мой основной интерес :)).
Кстати, я обычно не помещаю никаких объявлений в заголовочные файлы (кроме структур и перечислений), я помещаю их в отдельные файлы, если только:
- Необходимо сделать только несколько объявлений / вспомогательных функций; или
- Эти объявления являются функциями, которые я буду использовать в другом контексте (того же проекта, в данном случае), и я просто считаю, что лучше рассматривать их как отдельную «вспомогательную библиотеку» (в том же контексте).
Надеюсь, это поможет.