インライン フレンド関数の可視範囲
クラス内でインライン フレンド関数を定義しているにもかかわらず、実際のスコープはクラスの境界を越えて拡張されます。 C 標準では、インライン フレンド関数の名前は、最も近い外側の名前空間スコープで宣言された関数を参照することが規定されています。
ただし、この宣言された関数は、その名前空間内で一致する宣言が提供されるまで、非修飾または修飾された検索を通じてアクセスすることはできません。範囲。したがって、クラス自体、囲みスコープ、またはメンバー関数からフレンド関数を直接呼び出すと、エラーが発生します。
この制限は、フレンド関数がクラス内でオーバーライドまたは再定義せずに宣言されているという事実に起因します。既存の関数名。したがって、コンパイラは、その名前空間で明示的な宣言が検出されるまで、クラスまたはそれを囲む名前空間スコープ内の関数を認識しません。
インライン フレンド関数にアクセスするには、引数依存の検索 (ADL) を使用できます。 。 ADL を使用すると、コンパイラは呼び出しで使用される引数の型に基づいて関数を検索できます。このアプローチは、関数が引数として渡される型に「関連している」とみなされるという原則に沿っています。
以上がインライン フレンド関数をその定義クラス内から直接呼び出すことができないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。