回 帖 发 新 帖 刷新版面

主题:希望高手能够解释一下,在不改变对象的值的情况下,怎么才能改变对象的状态

希望高手能够解释一下,在不改变对象的值的情况下,怎么才能改变对象的状态

回复列表 (共4个回复)

沙发

你的这个“值”和“状态”是怎么定义的?
在C++中对象的值,包含“位值”和“逻辑值”两个含义
有些值可以改变,但这个改变并不改变这个对象的逻辑含义,这些值称为非逻辑值,用mutable前缀来修饰

板凳

我是菜鸟,不知道这么多,其实我是希望能够解释一下下面这段话
。。。。。。。
常函数的申明原则
  按照语言要求,凡是会改变非静态的成员函数,都不能声明为常成员函数。但是这并不意味着,凡是不会改变非静态成员对象的成员函数,都不会改变对象得状态。

3 楼

如果类的成员是一个指针,则在不修改这个指针的情况下,可以修改指针指向的值。

class Test
{
public:
    void f() const
    {
        *p = 10; // 不修改p,但是修改了p指向的值
    }

private:
    int* p;
};

bruceteen提到的是另一种情形:虽然成员函数用const修饰了,但它仍然可以修改(被mutable修饰的)类的非静态成员。

4 楼

bructeen是什么

我来回复

您尚未登录,请登录后再回复。点此登录或注册