当前位置: 代码迷 >> C++ >> mutable 关键字困惑
  详细解决方案

mutable 关键字困惑

热度:8312   发布时间:2013-02-26 00:00:00.0
mutable 关键字疑惑
书上说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的
------解决方案--------------------------------------------------------
引用:
引用:这个与mutable无关。

const对象当然只能调用const方法。

C/C++ code?1234567891011121314151617181920212223242526272829#include <iostream>using namespace std; class Foo {public:    void ……
是的,规定const对象只能调用const函数(构造函数和析构函数就不清楚了,LZ可以测一下),而const函数中不允许修改数据成员的值,除非该数据成员被声明为mutable型