对mutable的认识

来源:互联网 发布:交趾郡 知乎 编辑:程序博客网 时间:2024/06/16 19:46

首先我是在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表示程序设计存在缺陷。
总之还是要在实践中要体会它,这里只是一种标记让自己明白它的用处。

原创粉丝点击