Ich stieß auf einen C ++ - Code, der so etwas wie operator- & gt; () hat. Unten ist das Code-Snippet, sollte jemand es bitte erklären.
%Vor%Bitte beachten Sie, dass root_ Objekt einer anderen Klasse ist, für die der vollständige Code nicht verfügbar ist.
BEARBEITEN: Ich habe gerade den Code untersucht und festgestellt, dass root_ eine benutzerdefinierte Implementierung eines intelligenten Zeigers ist. Es hat Operator - & gt; überladen, um den intelligenten Zeiger zu dereferenzieren und den Wert des tatsächlichen Zeigers zu erhalten.
Wenn Sie ein Objekt haben, können Sie über object.attr
auf seine Attribute zugreifen. Wenn Sie einen Zeiger haben, können Sie auf die Attribute von auf das Objekt zugreifen, auf das er zeigt , indem Sie den Operator ->
wie folgt verwenden: ptr->attr
.
Bisher ist dies das Standardverhalten in C. Der Operator ->
kann jedoch überladen werden - d. h. überschrieben werden wie jede andere Funktion. Sie können Ihr eigenes Verhalten für eine Klasse definieren, so dass object->
bedeutet, was immer Sie wollen. Ich glaube jedoch nicht, dass in diesem Zusammenhang der Betreiber überlastet war. Die seltsame Syntax ist, weil Sie das nicht einfach tun können:
Da auf den Operator ->
etwas folgen muss. Der Weg dazu besteht darin, den expliziten Namen ohne Zucker für diese Funktion, d. H.% Co_de%, zu verwenden und ihn wie eine Funktion (daher die Klammer) zu bezeichnen.
Also:
%Vor% Die Bedeutung dieser Zeile lautet: "true, wenn das Objekt mit dem Objekt auf der linken Seite übereinstimmt. oder wenn unsere operator->
-Attribute auf Objekte zeigen, die untereinander gleich sind.".
Was Sie fragen, heißt Struktur-Dereferenzierungsoperator : T::operator ->();
Es kommt von c markiert sind, und in c ++ kann es überladen werden.
Er wählt ein Element durch einen Zeiger aus und verwendet in der Art, wie es in Ihrem Beispiel verwendet wird, einfach die Adresse der Instanz ( root_
).
Die Adresse wird dann verwendet, um die Identität der Instanzen zu vergleichen (stimmen die Adressen überein?)
Dies ist der Aufruf der Überladung des ->
-Operators der Klasse.
Normalerweise gibt operator- & gt; () einen Zeiger zurück, so dass dieser Code nur zwei Zeiger vergleicht. Ich denke, es ist eine verkettete Liste Implementierung, und Operator == vergleicht Zeiger auf die gesamte Liste und Zeiger auf Kopf (Root) -Element
Tags und Links c++ operator-overloading