Viele mögen es kontraintuitiv finden, dass der Zugriff auf statische Klassenmitglieder mithilfe von Nullzeigern nicht zur Laufzeit führt Fehler. Dieser Artikel befasst sich mit den technischen Details, um dieses Verhalten zu erklären, und erörtert mögliche Fallstricke.
Im Mittelpunkt der Diskussion steht die Bewertung der Nullzeiger-Dereferenzierung. Während der Zugriff auf Klassenmitglieder über nicht initialisierte Zeiger im Allgemeinen undefiniert ist, bilden statische Mitglieder eine Ausnahme. Beim Zugriff auf statische Elemente entspricht der Objektausdruck (z. B. d->a) im Wesentlichen (*d).a.
In diesem Fall ist der Das Argument der statischen Memberfunktion fun ist d, das ausgewertet, aber verworfen wird. Dies liegt daran, dass die Operation *d ein verworfener Wertausdruck ist, was bedeutet, dass sie ausschließlich auf ihre Nebenwirkungen hin ausgewertet wird (in diesem Fall keine).
Der Kern des Problems dreht sich darum, ob die Indirektion durch einen Nullzeiger von Natur aus zu undefiniertem Verhalten führt. Der C-Standard bietet diesbezüglich etwas widersprüchliche Leitlinien. Eine weit verbreitete Interpretation besagt jedoch, dass die bloße Indirektion durch einen Nullzeiger ohne weitere L-Wert-zu-R-Wert-Konvertierung oder andere Vorgänge kein undefiniertes Verhalten hervorruft.
Im Im Zusammenhang mit CWG-Problem Nr. 232 wurde das Konzept der „leeren Werte“ vorgeschlagen, um das Problem der Nullzeiger-Dereferenzierung zu lösen. Es wurde jedoch nie übernommen.
Der Grund dafür, dass der Beispielcode fehlerfrei ausgeführt werden kann, besteht darin, dass der Aufruf einer statischen Memberfunktion mit einem Nullzeiger keine Identität erfordert oder gespeicherter Wert des Objekts. Auf den Wert des statischen Elements wird einfach und ohne weitere L-Wert-Operationen zugegriffen.
Während der Zugriff auf statische Elemente mithilfe von Nullzeigern im Allgemeinen zulässig ist, ist es wichtig, die Verwendung von zu vermeiden. Operator für den Zugriff auf nicht statische Mitglieder. Für den Zugriff auf nicht statische Mitglieder muss das Objekt gültig sein, was bei der Verwendung von Nullzeigern zu undefiniertem Verhalten führen kann.
Das obige ist der detaillierte Inhalt vonWarum funktioniert der Zugriff auf statische Klassenmitglieder mit Nullzeigern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!