2016-07-12 8 views
1

通常、クラス本体に直接メンバー関数を定義するときは、暗黙的にinlineです。しかし、このことについて何:クラス本体で定義されたインラインフレンド関数

class Foo { 
public: 
    friend void swap(Foo& a, Foo& b) { ... } 

    ... 
}; 

swap暗黙的inlineかいませんか?

+0

インラインである必要があります。インラインでない機能はヘッダーの内部に入ることはできません。クラス本体はヘッダーの内部に挿入可能でなければなりません。クラス定義本体の内部で提供されるすべての機能は、インライン関数でなければなりません。 – PSkocik

+0

それは許可されていますか?クラス本体内にフレンド関数を定義することは、どういう意味ですか?メンバーではなく、囲む名前空間に入りますか? – jtbandes

+0

@jtbandesはい。これは、クラスが入っているのと同じ名前空間にある関数を定義します。 –

答えて

5

はい。標準から[class.friend/6-7]を参照してください:

クラスのフレンド宣言では、クラスが非ローカルクラス(9.8)である場合にのみ関数を定義できます。名前は修飾されておらず、関数には名前空間のスコープがあります。

このような関数は暗黙的にinlineです。

関連する問題