Heim  >  Artikel  >  Backend-Entwicklung  >  Warum behält eine geänderte konstante Variable ihren ursprünglichen Wert zur Kompilierungszeit bei, obwohl ein nicht konstanter Zeiger eine Änderung ihres tatsächlichen Werts zulässt?

Warum behält eine geänderte konstante Variable ihren ursprünglichen Wert zur Kompilierungszeit bei, obwohl ein nicht konstanter Zeiger eine Änderung ihres tatsächlichen Werts zulässt?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-01 19:33:02564Durchsuche

Why does a modified constant variable retain its original value at compile time, even though a non-const pointer allows for modification of its actual value?

Ändern einer Konstante durch einen nicht-konstanten Zeiger

Im angegebenen Code wird eine konstante Variable e auf 2 initialisiert. Ein nicht-konstanter Zeiger Der Konstantenzeiger w wird dann so umgewandelt, dass er auf die Adresse von e zeigt, wodurch implizit die Konstanz der Variablen entfernt wird. Durch die Dereferenzierung von w und die Zuweisung eines neuen Werts wird der Wert an der Adresse von e von 2 auf 5 geändert.

Wenn jedoch die Werte von *w und e gedruckt werden, erscheinen sie unterschiedlich:

<code class="cpp">cout << *w << endl; // Outputs 5
cout << e << endl; // Outputs 2</code>

Dieses Verhalten kann durch die Berücksichtigung der unterschiedlichen Art und Weise erklärt werden, in der *w und e sind ausgewertet:

  • *w wird zur Laufzeit ausgewertet: Der Compiler erkennt, dass *w ein nicht konstanter Zeiger ist und ruft dynamisch den Wert an der Adresse ab, auf die w zeigt. Da der Wert an dieser Adresse auf 5 geändert wurde, gibt *w korrekt 5 aus.
  • e wird als Konstante zur Kompilierungszeit behandelt: Der Compiler erkennt, dass e eine konstante Variable ist und bewertet seinen Wert zur Kompilierungszeit. Da der Wert von e zur Kompilierungszeit nicht geändert wurde, behandelt der Compiler ihn weiterhin als 2.

Der Wertunterschied ergibt sich daher aus den unterschiedlichen Auswertungszeitpunkten von *w und e. Trotz der Änderung des Werts an der Adresse von e bleibt die konstante Variable selbst zur Kompilierungszeit unverändert. Der nicht konstante Zeiger w ermöglicht jedoch die Änderung des Werts an der Adresse, auf die er zeigt, was zur Ausgabe von 5 für *w führt.

Das obige ist der detaillierte Inhalt vonWarum behält eine geänderte konstante Variable ihren ursprünglichen Wert zur Kompilierungszeit bei, obwohl ein nicht konstanter Zeiger eine Änderung ihres tatsächlichen Werts zulässt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn