关于c ++:为什么使用Mutable关键字


Why is Mutable keyword used

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
C++ 'mutable' keyword

1
2
3
4
5
6
7
8
9
10
11
12
class student {

   mutable int rno;

   public:
     student(int r) {
         rno = r;
     }
     void getdata() const {
         rno = 90;
     }
};

它允许您通过student成员函数向rno成员写入(即"变异"),即使与student类型的const对象一起使用也是如此。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class A {
   mutable int x;
   int y;

   public:
     void f1() {
       //"this" has type `A*`
       x = 1; // okay
       y = 1; // okay
     }
     void f2() const {
       //"this" has type `A const*`
       x = 1; // okay
       y = 1; // illegal, because f2 is const
     }
};


使用mutable关键字,以便const对象可以更改自身的字段。仅在您的示例中,如果您要删除mutable限定符,那么您将在该行上收到编译器错误

1
rno = 90;

因为声明为const的对象不能(默认情况下)修改它的实例变量。

除了mutable之外,唯一的其他解决方法是执行const_cast this,这确实非常hacky。

它在处理std::map时也很方便,如果它们是const,则无法使用索引运算符[]进行访问。


在你的特殊情况下,它习惯于撒谎和欺骗。

1
student s(10);

你想要数据吗?当然,只需拨打getdata()即可。

1
s.getdata();

你以为你会得到数据,但实际上我将s.rno更改为90。哈!而且你认为它是安全的,getdataconst并且所有......