構造体メンバー関数に関する C++ の質問。
f1()
名前をf2()
除いてと はどう違いますか?
struct F{
int f1(){
return 0;
}
int f2();
};
int F::f2(){
return 0;
}
f1()
インラインであると言えますが、そうf2()
ではありませんか?
f1
インラインでf2
あることとそうでないことは正しいですが、それは単にクラス内で定義されたからではありません。f2
次のように定義されている場合、インラインにすることもできます
inline int F::f2() {
return 0;
}
C++11 仕様セクション 9.3 は、f1
「そのクラス定義で定義されている」およびf2
「そのクラス定義の外で定義されている」と述べています。次に、クラス定義内で定義された関数はすべてインラインであると述べていますが、クラス定義外で定義された関数は明示的にインラインとしてマークする必要があります (上記の例のようにf2
)。
関数を暗黙的にインライン化することを除けば、クラス定義の内側と定義の外側は重要ではありません。クラス定義の内側とクラス定義の外側の概念は 9.3.2-9.3.5 でのみ表示されますが、「インライン」のより広い概念は仕様の他の部分で表示されます。