インライン フレンド関数のスコープ
C のコンテキストでは、インライン フレンド関数の字句スコープは、その中で定義されているクラスに拡張されます。ただし、実際のスコープを決定するには、さらなる調査が必要です。
ISO C 標準では、インライン フレンド関数が名前空間スコープのクラス内で宣言される場合、最も近い名前空間スコープの関数に名前を付けることが指定されています。関数がまだ宣言されていない場合、フレンド宣言だけでは、そのスコープ内で非修飾ルックアップの対象となる関数は表示されません。
代わりに、フレンド宣言により、引数依存のルックアップ (ADL) を通じて関数にアクセスできるようになります。 )。これは、関数の引数の型が、関数宣言を含む名前空間スコープに一致する限り、非修飾名を使用してフレンド関数を呼び出すことができることを意味します。
したがって、クラス内で宣言されたインライン フレンド関数は、経由でのみ呼び出すことができます。 ADL (その後、それを囲む名前空間スコープ内で宣言または定義されない限り)。これにより、引数で明確な名前解決が許可されている場合にのみ関数にアクセスできるようになります。
次のコード スニペットは、この動作を示しています。
namespace foo { struct bar { friend void baz(); }; } // Compilation error in main: 'baz' is not accessible through unqualified lookup int main() { foo::baz(); }
以上がC でのインライン フレンド関数のスコープは実際にどのように機能するのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。