Angenommen, ich habe eine C ++ - Klasse mit einer privaten Variablen, x. Gibt es einen Unterschied bei der Verwendung von this
? Gibt es das Potenzial für unerwünschtes / unerwartetes Verhalten, wenn ich this
nicht verwende?
Setter:
%Vor% Setzer mit this
:
Wegen der zweiphasigen Suche nach Klassenvorlagen ist möglicherweise this
für
(siehe erstes Beispiel) Beide sind gleichwertig.
In einer Nicht-Template-Situation vermeiden Sie normalerweise die Verwendung von this
; Der generierte Code ist derselbe, daher gibt es keinen Unterschied (siehe das zweite Beispiel) .
Der Grund dafür ist, dass der Compiler versucht, jedes Symbol, das er sieht, zu suchen. Der erste zu suchende Ort befindet sich im Klassenbereich (mit Ausnahme des Block- und Funktionsumfangs). Wenn dort ein Symbol dieses Namens gefunden wird, wird implizit this
ausgegeben. In Wirklichkeit sind Elementfunktionen nur gewöhnliche Funktionen mit einem unsichtbaren Parameter.
Wird tatsächlich in
umgewandelt %Vor%vom Compiler.
Verhaltensbeispiel für this
in Vorlagen:
Ausgabe:
%Vor%Beispiel Assembly für Nicht-Vorlage:
Mit this
:
Ohne this
:
Bestätigen Sie sich selbst:
test.cc:
%Vor% Führen Sie g++ -S test.cc
aus. Sie sehen eine Datei namens test.s
, in der Sie nach den Funktionsnamen suchen können.
Diese beiden Codefragmente (vorausgesetzt, sie sind Inline-Memberfunktionen, da es kein ClassName::
-Bit gibt) sind genau gleichwertig. Verwenden Sie, was Sie bevorzugen. Ich würde eher empfehlen, Parameter wie die Member-Variablen zu benennen; es ist zu einfach, sie durcheinander zu bringen.
Wenn die Membervariable x
durch das Argument x
verdeckt würde, dann wird this->
explizit benötigt, um sicherzustellen, dass Sie der richtigen Variablen zuweisen. Sonst wird es nicht benötigt.
Aber ich empfehle nicht, dass Sie Ihrem Argument das gleiche wie eine Membervariable geben. Das erste Beispiel, das Sie geben, hat weniger Fallstricke.