Was ist der Unterschied zwischen dem Punktoperator (.) und -> in C++? [duplicate]

Lesezeit: 2 Minuten

Was ist der Unterschied zwischen dem Punktoperator und
erdig

Was ist der Unterschied zwischen dem Punktoperator (.) und -> in C++?

1647145808 537 Was ist der Unterschied zwischen dem Punktoperator und
SwDevMan81

foo->bar() ist das gleiche wie (*foo).bar().

Die obigen Klammern sind wegen der Bindungsstärke des erforderlich * und . Betreiber.

*foo.bar() würde nicht funktionieren, weil Dot (.)-Operator wird zuerst ausgewertet (vgl Operator Vorrang)

Der Punkt (.) Operator kann nicht überladen werden, Pfeil (->)-Operator kann überladen werden.

Der Punkt (.)-Operator kann nicht auf Zeiger angewendet werden.

Siehe auch: Wofür ist der Pfeiloperator (->) synonym in C++?

  • Beachten Sie, dass dies nur für rohe Zeiger gilt. Für Klassentypen, die den Operator überladen, hat er einige andere interessante Eigenschaften …

    – David Rodríguez – Dribeas

    17. Juli 2012 um 18:19 Uhr

  • stört es nicht, dass -> ein Drilldown-Operator ist, und daher, wenn er überladen ist, nicht dem Mitglied des dereferenzierten Objekts entspricht (*boo).foo ? als ob boo->foo überladen werden könnte, um ein zwischengeschaltetes Proxy-Objekt zurückzugeben, das ein anderes foo-Element als das in der Ursprungsklasse hat. Würde das nicht behaupten ( (*boo).foo == boo->foo ) fehlschlagen. Es ist wahr, dass man vorsichtig sein sollte, da die C++-Elfen möglicherweise im Dunkeln lauern.

    – g24l

    19. Januar 2015 um 18:17 Uhr

Was ist der Unterschied zwischen dem Punktoperator und
Gordon Gustafson

Als Zeiger könnten wir einfach verwenden

*pointervariable.foo

Aber die . -Operator hat Vorrang vor dem * Betreiber, also . wird zuerst ausgewertet. Also müssen wir dies mit Klammern erzwingen:

(*pointervariable).foo

Aber es ist schwierig, die () die ganze Zeit zu tippen, also haben sie sich entwickelt -> als Abkürzung, um dasselbe zu sagen. Wenn Sie auf eine Eigenschaft eines Objekts oder einer Objektreferenz zugreifen, verwenden Sie . Wenn Sie über einen Zeiger auf eine Eigenschaft eines Objekts zugreifen, verwenden Sie ->

1647145809 961 Was ist der Unterschied zwischen dem Punktoperator und
Tadeusz Kopec für die Ukraine

Der Punktoperator kann nicht überladen werden, der Pfeiloperator kann überladen werden. Der Pfeiloperator soll im Allgemeinen auf Zeiger (oder Objekte, die sich wie Zeiger verhalten, wie intelligente Zeiger) angewendet werden. Der Punktoperator kann nicht auf Zeiger angewendet werden.

BEARBEITEN Wenn der Operator auf den Zeigerpfeil angewendet wird, entspricht er der Anwendung des Punktoperators auf Pointee, z ptr->field ist äquivalent zu (*ptr).field.

  • Obwohl der Indirektionsoperator (*foo) kann überladen werden

    – Benutzer

    23. Februar 2014 um 23:52 Uhr


Der Pfeiloperator ist wie Punkt, außer dass er zuerst einen Zeiger dereferenziert. foo.bar() ruft Methode auf bar() auf Objekt foo, foo->bar ruft Methode auf bar auf dem Objekt, auf das der Zeiger zeigt foo.

Was ist der Unterschied zwischen dem Punktoperator und
Johannes Rudolf

Die . operator ist für den direkten Mitgliedszugriff.

object.Field

Der Pfeil dereferenziert einen Zeiger, sodass Sie auf das Objekt/den Speicher zugreifen können, auf das er zeigt

pClass->Field

1647145808 537 Was ist der Unterschied zwischen dem Punktoperator und
SwDevMan81

pSomething->someMember

ist äquivalent zu

(*pSomething).someMember

1647145811 206 Was ist der Unterschied zwischen dem Punktoperator und
espz

Das Ziel. Punkt funktioniert auf Objekten; Pfeil funktioniert mit Zeigern auf Objekte.

std::string str("foo");
std::string * pstr = new std::string("foo");

str.size ();
pstr->size ();

995930cookie-checkWas ist der Unterschied zwischen dem Punktoperator (.) und -> in C++? [duplicate]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy