Wenn das Ändern eines const-Objekts undefiniertes Verhalten ist, wie funktionieren Konstruktoren und Destruktoren dann mit Schreibzugriff?

Der C ++ - Standard besagt, dass ein ursprünglich deklariertes Objekt geändert werden sollconst ist undefiniertes Verhalten. Aber wie funktionieren Konstruktoren und Destruktoren?

class Class {
public:
    Class() { Change(); }
    ~Class() { Change(); }
    void Change() { data = 0; }
private:
    int data;
};

//later:
const Class object;
//object.Change(); - won't compile
const_cast<Class&>( object ).Change();// compiles, but it's undefined behavior

Ich meine, hier machen der Konstruktor und der Destruktor genau dasselbe wie der aufrufende Code, aber sie dürfen das Objekt ändern und der Aufrufer ist nicht erlaubt - er stößt auf undefiniertes Verhalten.

Wie soll es unter einer Implementierung und nach dem Standard funktionieren?

Antworten auf die Frage(5)

Ihre Antwort auf die Frage