可能重复:
C++ 'mutable' keyword
class student {
mutable int rno;
public:
student(int r) {
rno = r;
}
void getdata() const {
rno = 90;
}
};
答案 0 :(得分:2)
它允许您通过rno
成员函数向student
成员写入(即“变异”),即使与const
student
类型的对象一起使用也是如此。
class A {
mutable int x;
int y;
public:
void f1() {
// "this" has type `A*`
x = 1; // okay
y = 1; // okay
}
void f2() const {
// "this" has type `A const*`
x = 1; // okay
y = 1; // illegal, because f2 is const
}
};
答案 1 :(得分:1)
使用mutable
关键字,以便const
对象可以更改自身的字段。仅在您的示例中,如果您要删除mutable
限定符,那么您将在行上获得编译器错误
rno = 90;
因为声明为const
的对象不能(默认情况下)修改它的实例变量。
除了mutable
之外,唯一的其他解决方法是const_cast
this
,这确实非常黑客。
在处理std::map
时它也很方便,如果它们是const,则无法使用索引运算符[]
访问它。
答案 2 :(得分:0)
在你的特定情况下,它常常撒谎和欺骗。
student s(10);
你想要数据吗?当然,只需致电getdata()
。
s.getdata();
您认为自己获得了数据,但实际上我已将s.rno
更改为90
。哈!而且你认为它是安全的,getdata
是const
并且所有......