「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > インライン フレンド関数をその定義クラス内から直接呼び出すことができないのはなぜですか?

インライン フレンド関数をその定義クラス内から直接呼び出すことができないのはなぜですか?

2024 年 12 月 22 日に公開
ブラウズ:491

Why Can\'t I Directly Call Inline Friend Functions from Within Their Defining Class?

インライン フレンド関数の可視範囲

クラス内でインライン フレンド関数を定義しているにもかかわらず、実際のスコープはクラスの境界を越えて拡張されます。 C 標準では、インライン フレンド関数の名前は、最も近い外側の名前空間スコープで宣言された関数を参照することが規定されています。

ただし、この宣言された関数は、その名前空間内で一致する宣言が提供されるまで、非修飾または修飾された検索を通じてアクセスすることはできません。範囲。したがって、クラス自体、囲みスコープ、またはメンバー関数からフレンド関数を直接呼び出すと、エラーが発生します。

この制限は、フレンド関数がクラス内でオーバーライドまたは再定義せずに宣言されているという事実に起因します。既存の関数名。したがって、コンパイラは、その名前空間で明示的な宣言が検出されるまで、クラスまたはそれを囲む名前空間スコープ内の関数を認識しません。

インライン フレンド関数にアクセスするには、引数依存の検索 (ADL) を使用できます。 。 ADL を使用すると、コンパイラは呼び出しで使用される引数の型に基づいて関数を検索できます。このアプローチは、関数が引数として渡される型に「関連している」とみなされるという原則に沿っています。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3