375 Stimmen

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

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

392voto

SwDevMan81 Punkte 47339

foo->bar() ist dasselbe wie (*foo).bar() .

Die obigen Klammern sind wegen der Bindungsstärke der * y . Betreiber.

*foo.bar() nicht funktionieren würde, weil Dot ( . ) wird zuerst ausgewertet (siehe Vorrang des Operators )

Der Punkt ( . ) 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 (->) in C++ ein Synonym?

88voto

Gordon Gustafson Punkte 38406

Für einen Zeiger könnten wir einfach verwenden

*pointervariable.foo

Aber die . hat einen höheren Vorrang als der Operator * Operator, also . wird zuerst ausgewertet. Wir müssen dies also mit Klammern erzwingen:

(*pointervariable).foo

Aber es ist schwierig, ständig die () zu tippen, also entwickelten sie -> als Abkürzung für die gleiche Aussage. Wenn Sie auf eine Eigenschaft eines Objekts oder einer Objektreferenz zugreifen, verwenden Sie . Wenn Sie auf eine Eigenschaft eines Objekts über einen Zeiger zugreifen, verwenden Sie ->

64voto

Der Punktoperator kann nicht überladen werden, der Pfeiloperator kann überladen werden. Der Pfeil-Operator ist in der Regel für Zeiger (oder Objekte, die sich wie Zeiger verhalten, z. B. intelligente Zeiger) gedacht. Der Punkt-Operator kann nicht auf Zeiger angewandt werden.

EDIT Wenn der Pfeil-Operator auf einen Zeiger angewandt wird, ist er gleichbedeutend mit der Anwendung des Punkt-Operators auf einen Punkt, z. B. ptr->field ist gleichbedeutend mit (*ptr).field .

36voto

Der Pfeil-Operator ist wie der Punkt, nur dass er zuerst einen Zeiger dereferenziert. foo.bar() ruft Methode bar() am Objekt foo , foo->bar ruft Methode bar auf das Objekt, auf das der Zeiger foo .

20voto

Johannes Rudolph Punkte 34512

En . Operator ist für den direkten Zugriff auf die Mitglieder gedacht.

object.Field

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

pClass->Field

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X