Ни один из подходов сам по себе не является лучшим, это вопрос предпочтений и стиля. Лично я всегда думаю, что лучше явно определять функции в отдельном файле .inline. Таким образом, вы очень четко представляете, что делаете, и сохраняете файл заголовка чистым.
Кроме того, если вы используете макрос, такой как INLINE, который определяется следующим образом:
#ifdef DEBUG
#define INLINE
#else
#define INLINE inline
#endif
Затем можно включить встроенный файл из заголовка в выпуске и из CPP в отладке. Это означает, что даже если компилятор встроит функции в отладку, у вас не возникнет никаких трудностей при отладке. Правда, в наши дни это не такая проблема для компиляторов, поэтому вы можете пропустить это, если не используете старый компилятор.