1
通常、クラス本体に直接メンバー関数を定義するときは、暗黙的にinline
です。しかし、このことについて何:クラス本体で定義されたインラインフレンド関数
class Foo {
public:
friend void swap(Foo& a, Foo& b) { ... }
...
};
はswap
暗黙的inline
かいませんか?
通常、クラス本体に直接メンバー関数を定義するときは、暗黙的にinline
です。しかし、このことについて何:クラス本体で定義されたインラインフレンド関数
class Foo {
public:
friend void swap(Foo& a, Foo& b) { ... }
...
};
はswap
暗黙的inline
かいませんか?
はい。標準から[class.friend/6-7]を参照してください:
クラスのフレンド宣言では、クラスが非ローカルクラス(9.8)である場合にのみ関数を定義できます。名前は修飾されておらず、関数には名前空間のスコープがあります。
このような関数は暗黙的に
inline
です。
インラインである必要があります。インラインでない機能はヘッダーの内部に入ることはできません。クラス本体はヘッダーの内部に挿入可能でなければなりません。クラス定義本体の内部で提供されるすべての機能は、インライン関数でなければなりません。 – PSkocik
それは許可されていますか?クラス本体内にフレンド関数を定義することは、どういう意味ですか?メンバーではなく、囲む名前空間に入りますか? – jtbandes
@jtbandesはい。これは、クラスが入っているのと同じ名前空間にある関数を定義します。 –