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

我的意思是,构造函数和析构函数的作用与调用代码完全相同,但是允许它们更改对象,并且不允许调用者-他会遇到未定义的行为。

在实现情况下并根据标准应如何工作?

最佳答案

该标准明确允许构造函数和析构函数处理const对象。从12.1/4“构造函数”开始:



和12.4/2“析构函数”:



作为背景,Stroustrup在“C++的设计和演化”(13.3.2定义const的细化)中说:

07-24 09:46
查看更多