__forceinline 和内联用法

__forceinline and inline usage

当在 class 中使用 __forceinline 或内联时,我是否必须在 MSVC 的头文件中包含定义?我听到不同的编译器对此有不同的看法。

示例 1:

//some_class.hpp
class some_class
{
public:
   __forceinline void some_function();
   inline void other_function();
};

//some_class.cpp
void some_class::some_function() { }
void some_class::other_function() { }

示例 2:

//some_class.hpp
class some_class
{
public:
   __forceinline void some_function() { }
   inline void other_function() { }
};

在 MSVC 中,如果函数先前明确声明为 inline__inline__forceinline,则在 .cpp 文件中保留函数定义会在链接时导致 unresolved external symbol 错误。所以我想必须将函数定义放入header。这是有道理的,因为为了实际内联函数,它的 body 必须可用于编译器。