Heim >Backend-Entwicklung >C++ >Was ist der richtige Typ des „this'-Zeigers in C: Eine Frage der Konstanz und Implementierung?
Typanalyse des „this“-Zeigers
In C ist der „this“-Zeiger ein spezieller Zeiger, der auf die aktuelle Instanz von zeigt die Klasse. Sein Typ wird basierend auf dem Kontext bestimmt, in dem er verwendet wird.
Typ des „diesen“ Zeigers in Mitgliedsfunktionen
In nicht konstanten Mitgliedsfunktionen der Typ „this“ ist einfach der Name der Klasse, gefolgt von *. Beispielsweise wäre in einer Klasse mit dem Namen ClassName der Typ von „this“ innerhalb ihrer nicht konstanten Methoden ClassName *.
Typ des „this“-Zeigers in Const-Memberfunktionen
Bei Verwendung innerhalb einer const-Memberfunktion wird der „this“-Zeiger zu einem Zeiger auf ein konstantes Objekt. Sein Typ spiegelt dies wider und wird zu const ClassName *. Dadurch wird sichergestellt, dass das Objekt nicht über den „this“-Zeiger geändert werden kann.
Warum „this“-Zeiger als Konstante festlegen?
Der Hauptgrund für die Erstellung von „this“ Die Zeigerkonstante in const-Memberfunktionen dient dazu, die const-Korrektheit der Klasse zu erzwingen. Durch die Verhinderung der Änderung des Objekts durch den „this“-Zeiger wird sichergestellt, dass das Objekt unverändert bleibt. Dies hilft, die Integrität der Klassendaten aufrechtzuerhalten und versehentliche Änderungen zu verhindern.
Fehler in der Interpretation
Die Beobachtung, dass der Typ des „this“-Zeigers ClassName * const this ist unter Windows mit VC 2008 ist falsch. Der „this“-Zeiger ist kein L-Wert und daher kann rechts vom Sternchen (*) kein const-Qualifizierer angewendet werden. Der korrekte Typ von „this“ in einer nicht konstanten Memberfunktion ist ClassName *.
Internes Implementierungsdetail
In der Vergangenheit haben einige Compiler ein Implementierungsdetail verwendet wo sie den 'this'-Zeiger auch in nicht konstanten Memberfunktionen als konstanten Zeiger interpretierten. Dies steht jedoch nicht im Einklang mit der C-Sprachspezifikation und wurde inzwischen von den meisten Compilern, einschließlich GCC, aufgegeben.
Hinweis zu C 11-Rvalue-Referenzen
Mit dem Durch die Einführung von R-Wert-Referenzen in C 11 wurde es möglich, die zusätzliche Konstanz zu erkennen, die dem „this“-Zeiger durch Implementierungen hinzugefügt wurde, die immer noch den oben genannten Trick verwenden. Dies hat dazu geführt, dass die Technik veraltet ist, da sie bei der Arbeit mit R-Wert-Referenzen zu Fehlern führen kann.
Das obige ist der detaillierte Inhalt vonWas ist der richtige Typ des „this'-Zeigers in C: Eine Frage der Konstanz und Implementierung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!