书上说mutable是修饰成员变量为总是可修改的,即不可能为const,所以我做了一个测试,在类中设置一个成员为mutable然后设置一个修改此成员的函数,然后定义一个const对象,调用此函数,却发现此时编译会报错,但是当我将成员函数设置成const函数时,却能够正常运行并达到预期效果。对此现象,求相关解释?为何成员函数一定要是const才能编译通过呢?
------解决方案--------------------------------------------------------
这个与mutable无关。
const对象当然只能调用const方法。
#include <iostream>
using namespace std;
class Foo {
public:
void set_bar(int val)
{
bar = val;
}
void set_bar_const(int val) const
{
bar = val;
}
private:
mutable int bar;
};
int main(int argc, char *argv[])
{
Foo foo;
foo.set_bar(0);
foo.set_bar_const(0);
const Foo cfoo(foo);
// cfoo.set_bar(0); 出错
cfoo.set_bar_const(0);
return 0;
}
------解决方案--------------------------------------------------------
如果你要让const对象也能调用,就将成员函数设置为const的。常对象只能调用常函数。
const成员函数,不能修改成员变量的值,除非该变量是mutable的
------解决方案--------------------------------------------------------
是的,规定const对象只能调用const函数(构造函数和析构函数就不清楚了,LZ可以测一下),而const函数中不允许修改数据成员的值,除非该数据成员被声明为mutable型