对mutable的认识

首先我是在VS2015的环境下编写代码所以在这里写个简单的类来说明问题的情况:

class A
{
public:
    A();
    ~A();
    void updateCamView(Camera *cam);//Camera是一个相机类
    Matrixcs getMatrixView()const;
private:
    Matrixcs m_MatView;//说明Matrixcs是一个矩阵类在这里不做说明
}
//这里我只实现所要用的函数
void A::updateCamView(Camera *cam)
{
    Camera* _cam = cam;
    m_MatView = _cam->getViewMatrix(); //在这里报错,不能够进行赋值操作。VS2010下面是可以这样操作的.
}

//在这里说明一下getViewMatrix()的声明是 const Matrixcs getViewMatrix()const;

但是在VS2010下面是不报错的,可以直接编译通过,但是我用的VS2015是编译不通过的,最后查到问题是
在m_MatView对象前面要声明mutable才能编译通过,以前也没有用过在这里写出来可以加以反思与思考。
原来mutable在C++中是为了突破const的限制而设置的。被mutable修饰的变量将永远处于可变的状态。
mutable的作用有两点:
(1)保持常对象的大部分数据成员仍然是“只读”的情况下,实现对个别数据成员的修改。
(2)使const函数可修改对象的mutable数据成员。
使用mutable的注意事项:
(1)mutable只能作用于类的非静态和非常量数据成员。
(2)在一个类中,应尽量或者不用mutable,大量使用mutable表示程序设计存在缺陷。
总之还是要在实践中要体会它,这里只是一种标记让自己明白它的用处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值