Heim >Backend-Entwicklung >C++ >Warum führt „int x = x;' zu undefiniertem Verhalten in C?
L-Wert-zu-R-Wert-Konvertierung und undefiniertes Verhalten in int x = x;
Hintergrund:
Der C-Code int x = x; Initialisiert eine Variable x mit ihrem eigenen Wert, aber dieser Wert ist für eine automatische Variable nicht initialisiert. Daher ist der Wert unbestimmt und es kann zu undefiniertem Verhalten kommen.
L-Wert-in-R-Wert-Konvertierung:
Eine L-Wert-in-R-Wert-Konvertierung transformiert einen L-Wert (Referenz oder Objekt mit Adresse) in einen Wert (Wert ohne Adresse) umwandeln. Der C-Standard besagt, dass die Durchführung dieser Konvertierung für einen nicht initialisierten Wert zu undefiniertem Verhalten führt.
Wird beim rechten x eine L-Wert-in-R-Wert-Konvertierung durchgeführt?
Ja . Obwohl x auf der rechten Seite der Zuweisung steht, ist es immer noch ein L-Wert. Der Zuweisungsoperator benötigt einen L-Wert auf der linken Seite (wo der Wert gespeichert wird) und einen Pr-Wert auf der rechten Seite (die Quelle des Werts).
Schlussfolgerung:
Daher wird das rechte x einer L-Wert-in-R-Wert-Konvertierung unterzogen, und da es sich auf einen nicht initialisierten Wert bezieht, hat der bereitgestellte Code dies getan undefiniertes Verhalten.
Das obige ist der detaillierte Inhalt vonWarum führt „int x = x;' zu undefiniertem Verhalten in C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!