您可以修改const限定的类类型对象的可变数据成员:
struct awesome_struct {
awesome_struct() : x(0) { }
mutable int x;
};
int main() {
const awesome_struct a;
a.x = 42;
}
Run Code Online (Sandbox Code Playgroud)
这里的行为是明确定义的.
在这种情况下,我想我已经解释了这种情况:试图改变变量的值,即const给出了未定义的行为.他可能要问的是如何更改一个本身不是const的变量,但是你已经收到指针或const的引用.在这种情况下,当您确定变量本身不是 const限定时,您可以抛弃常量const_cast,然后继续修改.
如果在变量本身是const限定的情况下执行相同的操作,编译器将允许代码进行编译,但结果将是未定义的行为.修改变量的尝试可能会成功 - 或者它可能会抛出异常,中止程序,重新格式化NAS设备的硬盘驱动器,或者其他任何东西.
值得一提的是,当/如果变量可能需要以这种方式使用时,您可以指定变量本身是可变的.这基本上意味着所讨论的变量永远不是 const限定的,即使它所属的对象是 const限定的.