如何正确更改const对象?

时间:2017-10-12 19:54:32

标签: c++

我有一个类A的程序参数,在程序运行期间应该不会改变,即在开始初始化之后,我只是在任何地方传递const A&。现在我需要在程序开始时我不知道的值添加一个新参数duble p,但我需要稍后再分配它。我知道如何更改const对象(通过指针或const_cast)有不同的方法,但这里的最佳做法是什么?有什么方法可以做到这一点并使程序易于阅读。

这样可以(安全和干净)还是应该以不同的方式完成?

class A
{
public:
    /* bunch of parameters which are initialized in constructor of A */
    double p; /* not change in constructor */
};

void change_p(const A& par)
{
    *(&par.p) = 5;
}

int main()
{
    A par();
    change_p(par);
}

1 个答案:

答案 0 :(得分:1)

double声明为mutable,然后即使对象为const也可以更改:

class A
{
public:
    /* bunch of parameters which are initialized in constructor of A */
    mutable double p; /* not change in constructor */
};

void change_p(const A& par)
{
    par.p = 5; // <-- OK, even though par is const!
}

int main()
{
    A par;
    change_p(par);
}

Live Demo

相关问题