Was ist der Unterschied zwischen dem Punktoperator (.) und -> in C++?
- Was kann ich statt des Pfeiloperators `->` verwenden? (7 Antworten )
Antworten
Zu viele Anzeigen?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?
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 ->
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
.
- See previous answers
- Weitere Antworten anzeigen