const Variable



  • Hallo,

    ich habe eine Fragen eine grundsätzliche Frage zu Instanzen. Ich benütze den g++ - Compiler.

    for(int i =0; i< 10; ++i){
    		const int k = i;
    		cout << & k << endl;
    		}
    

    Dieser Code zeigt mir aber 10 mal die selbe Adresse an. Also wird nur eine Instanz angelegt.
    Wenn aber nur eine Instanz angelegt wird, dann müsste aber eine const-Instanz überschrieben werden, was ja nicht möglich sein sollte.

    Annahme A: In der for-Schlaufe werden 10 verschiedene Integer-Instanzen angelegt
    Wie ist es möglich, dass alle Instanzen den selben Namen (k) tragen?
    Warum haben alle Instanzen die selbe Adresse?

    Annahme B: In der for-Schlaufe wird die Instanz 10 mal überschrieben
    Wie ist es möglich, dass eine const Instanz überschrieben werden kann?

    Welche der beiden Annahmen ist richtig und warum?

    Vielen Dank fürs Lesen und Antworten 😃

    Magnus



  • Der Thread gehört eher in den C++ bereich.

    Magnus90 schrieb:

    Annahme A: In der for-Schlaufe werden 10 verschiedene Integer-Instanzen angelegt
    Wie ist es möglich, dass alle Instanzen den selben Namen (k) tragen?
    Warum haben alle Instanzen die selbe Adresse?

    Annahme B: In der for-Schlaufe wird die Instanz 10 mal überschrieben
    Wie ist es möglich, dass eine const Instanz überschrieben werden kann?

    Mal ins blaue geschossen:

    Der Code-Optimierer optimiert die Konstanten-Deklaration aus der Schleife heraus und führt nur die Ausgabe 10 mal aus.



  • Magnus90 schrieb:

    Annahme B: In der for-Schlaufe wird die Instanz 10 mal überschrieben
    Wie ist es möglich, dass eine const Instanz überschrieben werden kann?

    Sie wird nicht überschrieben. Die eine hört auf zu existieren und die andere wird im nächsten Schleifendurchlauf angelegt.

    Nirvash schrieb:

    Der Code-Optimierer optimiert die Konstanten-Deklaration aus der Schleife heraus und führt nur die Ausgabe 10 mal aus.

    Möglich, aber die Optimierung darf die Semantik nicht verändern, deshalb kann die Optimierung die Semantik auch nicht erklären.



  • Hallo Bashar und Nirvash,

    vielen Dank für die Antworten! 👍

    Also wenn ich es richtig verstanden habe, funktioniert es so:

    In der for-Schlaufe wird der {}-Block 10 mal durchlaufen. Jedes mal wenn man den Block verlässt, wird die Instanz gelöscht, und jedes mal wenn man wieder in den Block eindringt, wird wieder eine Instanz angelegt. Ist dies so richtig?

    Vielen dank nochmals fürs Antworten.

    Magnus

    (ich wollte es eigentlich ins C++ Forum schreiben, bin dann aber verrutscht und bin darum hier gelandet)


Log in to reply