const ref. auf anderen typ



  • Hi,
    kurze Frage dazu:

    bool b = true;
    
    	cout << sizeof(b) << endl;
    
    	const int& i = b;
    
    	cout << sizeof(i) << endl;
    
    	for(int i = 1; i < 4; ++i) // Speicher scheint zugreifbar und Null
    		cout << (int)((char*)&i)[i] << endl;
    

    Ausgabe:
    1
    4
    0
    0
    0

    Wird also bei einer (dieser) const ref. eine Stackvariable angelegt? Denn vom bool können die 4 Bytes ja nicht kommen, und wenn sizeof nun 4 ist, kann ich ja im Speicher auch auf 4 Bytes zugreifen, ohne access viol. zu riskieren, oder?



  • i ist eine Referenz auf ein neues, namenloses int -Objekt. Dessen Wert wurde aus b konvertiert und müsste 1 sein.
    Deine Schleife gibt die drei letzten Bytes des namenlosen Objektes aus. Du siehst die eins nicht, weil die im ersten Byte steht.



  • TyRoXx schrieb:

    Du siehst die eins nicht, weil die im ersten Byte steht.

    Jo danke, weiß schon. Ging mir nur darum, ob i eine Stackvariable repräsentiert, oder eben nur reinterpretiert wird (und somit der Speicher von i weiterhin nur 1 Byte groß ist).



  • TyRoXx schrieb:

    Deine Schleife gibt die drei letzten Bytes des namenlosen Objektes aus.

    Ich hätte ja gesagt, daß seine Schleife die letzten drei Bytes des schleifenlokalen i durchgeht...



  • Caligulaminus schrieb:

    TyRoXx schrieb:

    Deine Schleife gibt die drei letzten Bytes des namenlosen Objektes aus.

    Ich hätte ja gesagt, daß seine Schleife die letzten drei Bytes des schleifenlokalen i durchgeht...

    Ja, das auch.



  • Ups, Ergebnis aber dasselbe 😃
    Flüchtigkeitsfehler 😞



  • loboo schrieb:

    Ups, Ergebnis aber dasselbe 😃

    Wie "Ergebnis dasselbe"?
    Wenn ich beide Fehler korrigiere, bekomme ich:

    1
    4
    1
    0
    0
    0
    


  • Achso:
    Und ja, da wird ein temporäres Objekt vom Typ int angelegt und mit b initialisiert.



  • Furble Wurble schrieb:

    Achso:
    Und ja, da wird ein temporäres Objekt vom Typ int angelegt und mit b initialisiert.

    Also eine Stackvariable, auf deren Speicher (hier nun 4 Bytes anstatt 1) man zugreifen kann. Ok.

    Furble Wurble schrieb:

    Wie "Ergebnis dasselbe"?
    Wenn ich beide Fehler korrigiere, ...

    Ich habe absichtlich bei Index 1 begonnen, auf Byte 1 ist natürlich zugreifbar (bool), und auf Bytes 2-4 der int-Referenz dann scheinbar auch.


Anmelden zum Antworten