Heim >Backend-Entwicklung >C++ >Wie funktionieren die Pointer-to-Member-Operatoren „->*' und „.*' von C?

Wie funktionieren die Pointer-to-Member-Operatoren „->*' und „.*' von C?

Susan Sarandon
Susan SarandonOriginal
2024-11-26 16:35:14836Durchsuche

How Do C  's `->*` und `.*` Zeiger-zu-Member-Operatoren funktionieren?
*` und `.*` Zeiger-zu-Member-Operatoren funktionieren? " />

Zeiger-zu-Member-Operatoren verstehen -> und . in C

Trotz vorhandener Dokumentation die Bedeutung von Zeigern verstehen -to-member-Operatoren -> und . in C können schwer fassbar sein. Dieser Artikel zielt darauf ab ihre Funktionalität und ihre Anwendung in verschiedenen Szenarien verdeutlichen.

Was sind -> und .?

Es werden Zeiger-zu-Mitglieds-Operatoren verwendet um indirekt über Zeiger oder Verweise auf Objekte auf Mitgliedsfunktionen zuzugreifen. -> dereferenziert einen Mitgliedsfunktionszeiger, um eine Mitgliedsfunktion des referenzierten Objekts aufzurufen. . dereferenziert einen Mitgliedszeiger, um eine Mitgliedsfunktion des gezeigten Objekts aufzurufen.

Wann sind -> und . zu verwenden?

  • Verwenden Sie ->*, wenn Sie einen Zeiger auf einen haben Objekt:
X* px = new X;
pointer somePointer = &X::f;
(px->*somePointer)(); // Calls px->f()
  • Verwenden Sie .*, wenn Sie einen Verweis auf ein Objekt haben:
X& rx = x;
pointer somePointer = &X::f;
(rx.*somePointer)(); // Calls rx.f()
  • Verwenden Sie nicht x.somePointer() oder px->somePointer(): Diese Syntaxen sind ungültig, weil sie versuchen, nicht vorhandene Mitgliedsfunktionen aufzurufen.

Beispiel

Betrachten Sie den folgenden Code:

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;
}

In diesem Beispiel dereferenziert der Zeiger den Mitgliedsfunktionszeiger &X::f und weist ihn dem Zeiger zu. Dann wird . auf x verwendet, um x.f() aufzurufen, und -> wird auf px verwendet, um px->f() aufzurufen.

Durch das Verständnis des Unterschieds zwischen -> ; und . und wenn jede davon geeignet ist, können Entwickler Member-Funktionszeiger und indirekte Funktionsaufrufe in C effektiv verarbeiten.

Das obige ist der detaillierte Inhalt vonWie funktionieren die Pointer-to-Member-Operatoren „->*' und „.*' von C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn