Mini C++ Rätsel



  • Ja, mir war gerade langweilig und da hab ich einfach mal ein bißchen mit C++ rumgehackt. 🤡
    Rätselfrage: Welche Ausgabe wird auf der Konsole ausgegeben, wenn man ein Objekt der Klasse Hack erzeugt (mit Begründung):

    class Hack {
    public:
    	int x, y, z;
    	Hack():x(3), y(2), z(1) {
    		1[reinterpret_cast<int*>(this)] = 1;
    		cout << x << y << z;
    	}
    	virtual ~Hack() {}
    };
    

    Habs nur mit VS05 getestet. Aber nicht cheaten! 😉



  • ich tippe auf 311. Begründung gibt's, wenn es richtig ist.



  • random NPC schrieb:

    ich tippe auf 311. Begründung gibt's, wenn es richtig ist.

    Ist leider nicht richtig. 😃



  • this->that schrieb:

    random NPC schrieb:

    ich tippe auf 311. Begründung gibt's, wenn es richtig ist.

    Ist leider nicht richtig. 😃

    ah, der zeiger auf die vtable?



  • random NPC schrieb:

    this->that schrieb:

    random NPC schrieb:

    ich tippe auf 311. Begründung gibt's, wenn es richtig ist.

    Ist leider nicht richtig. 😃

    ah, der zeiger auf die vtable?

    dann 121, weil die speicherstruktur der klasse aussieht wie:

    *v_table : 4 byte
    x : 4 byte  <--- this[1] = 1[this]
    y : 4 byte
    z : 4 byte
    

    (auf 32 bit)



  • Richtig. 👍 :xmas1:



  • Es kommt 42 raus und gleichzeitig geht mein Toaster an.
    Begründung: weil das UB ist, und alles rauskommen darf.



  • hustbaer schrieb:

    Es kommt 42 raus und gleichzeitig geht mein Toaster an.
    Begründung: weil das UB ist, und alles rauskommen darf.

    soll UB undefiniert bedeuten? ➡ Müll dieses Rätsel. 👎



  • UB = undefined behaviour, also ja, undefiniertes Verhalten.
    (UB ist eine, wenn es um den C++ Standard geht, nicht unübliche Abkürzung -- habe ich zumindest schon oft wo gelesen)



  • 1[reinterpret_cast<int*>(this)] = 1;
    

    Ich verstehe das nicht, wie kann das sein, dass man eine stinknormale dezimale Eins als "Array" benutzen kann mit nem Pointer als Index? Habe ich da was verpasst? Wie kann das sein, dass this[1] == 1[this]?



  • abc.w schrieb:

    Habe ich da was verpasst? Wie kann das sein, dass this[1] == 1[this]?

    Das liegt daran, dass Array-Indizierung über Addition definiert ist:
    a[b] == *(a+b) = *(b+a) = b[a]

    Frag nicht nach dem Sinn.


Log in to reply