ホームページ > バックエンド開発 > C++ > インラインフレンド関数のスコープとアクセシビリティは C でどのように機能しますか?

インラインフレンド関数のスコープとアクセシビリティは C でどのように機能しますか?

DDD
リリース: 2024-12-16 20:44:10
オリジナル
438 人が閲覧しました

How Does the Scope and Accessibility of Inline Friend Functions Work in C  ?

インライン フレンド関数: スコープとアクセシビリティ

クラスでインライン フレンド関数を定義する場合、そのスコープは主に最も近い囲み関数の影響を受けます。名前空間。フレンド宣言は関数名を名前空間に導入しますが、関数がそのスコープ内での通常の検索に対してすぐに可視になるわけではありません。

C 標準 (ISO/IEC 14882:2011) によると、「if a非ローカル クラスでのフレンド宣言は、最初にクラスまたは関数を宣言します。そのフレンド クラスまたは関数は、最も内側の外側の名前空間のメンバーです。」これは、フレンド関数の名前が、名前空間スコープ内の非修飾または修飾された検索では最初は見つからないことを意味します。

一致する宣言が名前空間スコープ自体で、クラス定義の前後に提供されている場合のみ。友情を付与する場合、関数は非修飾検索を通じて表示されるようになります。さらに、フレンド関数は、引数依存の検索を通じて引き続き呼び出すことができます。これは、引数の型に関連付けられた名前空間とクラスの関数を考慮します。

たとえば、質問で提供されているコードは、baz という名前のインライン フレンド関数を定義します。 foo 名前空間内の bar クラス内。ただし、プログラム内の異なるスコープから baz を呼び出そうとすると、通常の検索では関数が表示されないためエラーが発生します。

  • foo::baz() は、baz が foo のメンバーではないため失敗します。 namespace.
  • foo::bar::baz() は、baz が bar のメンバーではないため失敗します。 class.
  • foo::bar::call_friend() は、baz が call_friend メンバー関数のスコープ内で宣言されていないため失敗します。

したがって、インラインのフレンド関数にはアクセス制限があり、範囲。これらは主に、クラス名を修飾子として指定せずに、クラスのプライベートおよび保護されたメンバーにアクセスできる機能で知られています。ただし、周囲のスコープ内でのそれらの可視性は、一致する宣言が名前空間で提供されるか、引数依存の検索を通じて提供されるまで制限されます。

以上がインラインフレンド関数のスコープとアクセシビリティは C でどのように機能しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート