インライン フレンド関数へのアクセス: 字句スコープと実際のスコープ
クラス内でインライン フレンド関数を宣言する場合、字句だけでなく考慮することが重要です。スコープだけでなく、実際のスコープも含みます。字句的には、そのような関数は定義されているクラス内に存在します。ただし、実際のアクセシビリティはコンテキストによって制限される場合があります。
C 標準 (ISO/IEC 14882:2011) に従って、友人が関数がクラス内で修飾されていない識別子を使用して宣言されている場合、その関数は、最も近い外側の名前空間スコープ内の関数を参照します。ただし、このフレンド宣言では、そのスコープでの通常の検索に対してその関数が可視になるわけではありません。代わりに、引数依存の検索 (ADL) を通じてのみアクセス可能になります。
この動作は標準の 7.3.1.2/3 で強調されています。
「非-local クラスが最初にクラスまたは関数を宣言し、そのフレンドのクラスまたは関数が最も内側の囲み名前空間のメンバーである場合、そのフレンドの名前は、非修飾検索または修飾された検索によって見つかるまで見つかりません。一致する宣言がその名前空間スコープで提供されます。"
本質的に、インライン フレンド関数は ADL 経由でのみ呼び出すことができます。引数が指定されていない場合は呼び出すことはできません。したがって、提供されているコード例で示されているように、クラスの囲みスコープまたはメンバー関数を通じてそのような関数を直接呼び出そうとすると、コンパイル エラーが発生します。
以上がC でインライン フレンド関数にアクセスするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。