1

クラス内で __forceinline または inline を使用する場合、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() { }
};
4

1 に答える 1

1

MSVC では、.cpp ファイルに関数定義を残すと、関数が以前に明示的に,またはunresolved external symbolとして宣言されている場合、リンク時にエラーが発生します。したがって、関数定義をヘッダーに入れる必要があると思います。関数を実際にインライン化するには、その本体をコンパイラで使用できる必要があるため、これは理にかなっています。inline__inline__forceinline

于 2017-04-23T22:06:49.207 に答える