ホームページ >バックエンド開発 >C++ >C の `->*` および `.*` メンバーへのポインタ演算子はどのように機能するのでしょうか?

C の `->*` および `.*` メンバーへのポインタ演算子はどのように機能するのでしょうか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-26 16:35:14838ブラウズ

How Do C  's `->*` および `.*` メンバーへのポインター演算子は機能しますか?
*` と `.*` メンバーへのポインター演算子は機能しますか? " />

ポインターからメンバーへの演算子を理解する -> C の と .

既存のドキュメントにもかかわらず、ポインターの意味を理解する-to-member 演算子 ->C の と . は次のようになります。この記事は、その機能とさまざまなシナリオでの応用を明確にすることを目的としています。

-> と . とは?

ポインタ- to-member 演算子は、オブジェクトへのポインターまたは参照を通じて間接的にメンバー関数にアクセスするために使用されます。 -> 逆参照。参照先オブジェクトのメンバー関数を呼び出すためのメンバー関数ポインター。 は、参照先のオブジェクトのメンバー関数を呼び出すためのメンバー ポインターを逆参照します。

使用する場合 ->と .?

  • を使用します->* オブジェクトへのポインターがある場合:
X* px = new X;
pointer somePointer = &X::f;
(px->*somePointer)(); // Calls px->f()
  • オブジェクトへの参照がある場合は .* を使用します:
X& rx = x;
pointer somePointer = &X::f;
(rx.*somePointer)(); // Calls rx.f()
  • は使用しないでくださいx.somePointer() または px->somePointer(): これらの構文は、存在しないメンバー関数を呼び出そうとしているため無効です。

次のコードを考えてみましょう:

struct X
{
   void f() {}
   void g() {}
};

int main()
{
   X x;
   void (X::*pointer)() = &X::f;

   // Call x.f() using .*
   (x.*pointer)();

   X* px = new X;

   // Call px->f() using ->*
   (px->*pointer)();

   return 0;
}

この中でたとえば、pointer はメンバー関数ポインター &X::f を逆参照し、それを pointer に割り当てます。次に、. を x で使用して x.f() を呼び出し、-> を px で使用して px->f() を呼び出します。

-> の違いを理解することで、 ; と . があり、それぞれが適切であれば、開発者は C でメンバー関数ポインターと間接関数呼び出しを効果的に処理できます。 .

以上がC の `->*` および `.*` メンバーへのポインタ演算子はどのように機能するのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。