mutable

  mutable只能用于修饰类的非静态数据成员。对于使用使用mutable修饰的成员变量,const成员函数可以调用它,并改变它的值。如果缺少mutable,那么就无法编译通过。

  mutable具有欺骗性,使用它可以使const的成员函数悄悄的改变的类的成员函数,而无须使用const_cast来转换this指针。

class X{ 
public: 
  void foo() const 
  { 
     if (!changed_){ 
       changed_ = true; 
     } 
     // do something 
  } 
private: 
  mutable bool changed_; 
};

//--------------------------------------------------

另外一个例子:
class String{
public:
      String(char* pstring):pstring_(pstring)
      {
      }
      char& operator[](int index)const
      {
            ...
            return pstring_[index];
      } 
private:
      char* pstring_; 
};

main中的代码:
const String str("any man of mine!");
char& c=str[0]; //call const-function
c='B'; //modified 'pstring_ ' from outer

这些代码将会通过编译,虽然会出现运行时错误。

转载于:https://www.cnblogs.com/RoyCNNK/articles/3351416.html

你可能感兴趣的:(mutable)