C++ 标准说修改最初声明的对象const
是未定义的行为。但是构造函数和析构函数是如何操作的呢?
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
我的意思是这里的构造函数和析构函数与调用代码做的事情完全相同,但是它们被允许更改对象并且不允许调用者——他遇到了未定义的行为。
它应该如何在实现下并根据标准工作?