深入理解C++中的mutable关键字

转载 2007年09月25日 16:54:00
mutalbe的中文意思是“可变的,易变的”,跟constant(既C++中的const)是反义词。

  在C++中,mutable也是为了突破const的限制而设置的。被mutable修饰的变量,将永远处于可变的状态,即使在一个const函数中。

  我们知道,如果类的成员函数不会改变对象的状态,那么这个成员函数一般会声明成const的。但是,有些时候,我们需要在const的函数里面修改一些跟类状态无关的数据成员,那么这个数据成员就应该被mutalbe来修饰。

  下面是一个小例子:

class ClxTest
{
 public:
  void Output() const;
};

void ClxTest::Output() const
{
 cout << "Output for test!" << endl;
}

void OutputTest(const ClxTest& lx)
{
 lx.Output();
}

  类ClxTest的成员函数Output是用来输出的,不会修改类的状态,所以被声明为const的。

  函数OutputTest也是用来输出的,里面调用了对象lx的Output输出方法,为了防止在函数中调用其他成员函数修改任何成员变量,所以参数也被const修饰。

   如果现在,我们要增添一个功能:计算每个对象的输出次数。如果用来计数的变量是普通的变量的话,那么在const成员函数Output里面是不能修改该 变量的值的;而该变量跟对象的状态无关,所以应该为了修改该变量而去掉Output的const属性。这个时候,就该我们的mutable出场了——只要 用mutalbe来修饰这个变量,所有问题就迎刃而解了。

  下面是修改过的代码:

class ClxTest
{
 public:
  ClxTest();
  ~ClxTest();

  void Output() const;
  int GetOutputTimes() const;

 private:
  mutable int m_iTimes;
};

ClxTest::ClxTest()
{
 m_iTimes = 0;
}

ClxTest::~ClxTest()
{}

void ClxTest::Output() const
{
 cout << "Output for test!" << endl;
 m_iTimes++;
}

int ClxTest::GetOutputTimes() const
{
 return m_iTimes;
}

void OutputTest(const ClxTest& lx)
{
 cout << lx.GetOutputTimes() << endl;
 lx.Output();
 cout << lx.GetOutputTimes() << endl;
}

  计数器m_iTimes被mutable修饰,那么它就可以突破const的限制,在被const修饰的函数里面也能被修改。 

C++ 中的 mutable 关键字

C++ 中的 mutable 关键字在C++中,mutable 是为了突破 const 的限制而设置的。可以用来修饰一个类的成员变量。被 mutable 修饰的变量,将永远处于可变的状态,即使是 co...
  • liyuanbhu
  • liyuanbhu
  • 2015年12月20日 19:32
  • 2243

C++中mutable关键字的用法

mutalbe的中文意思是“可变的,易变的”,是constant(即C++中的const)的反义词。在C++中,mutable也是为了突破const的限制而设置的。被mutable修饰的变量将永远处于...
  • K346K346
  • K346K346
  • 2015年08月27日 17:12
  • 1610

C++中的mutable关键字

    mutalbe的中文意思是“可变的,易变的”,跟constant(既C++中的const)是反义词。    在C++中,mutable也是为了突破const的限制而设置的。被mutable修饰...
  • starlee
  • starlee
  • 2006年12月05日 09:13
  • 15125

深入理解C++中的mutable关键字

2006-12-16 05:00 来源:BLOG 作者:寒星轩 责任编辑:方舟·yesky 评论(32)                  推荐:经典教程专区   mut...
  • keti_xuetangyi
  • keti_xuetangyi
  • 2013年08月07日 13:54
  • 382

深入理解C++中的mutable关键字

mutalbe的中文意思是“可变的,易变的”,跟constant(既C++中的const)是反义词。   在C++中,mutable也是为了突破const的限制而设置的。被mutable修饰的变...
  • u011676589
  • u011676589
  • 2013年09月07日 14:10
  • 431

深入理解C++中关键字 mutable

转载网址:http://dev.yesky.com/393/3007393.shtml mutalbe的中文意思是“可变的,易变的”,跟constant(既C++中的const)是反义词。 ...
  • wang_jing_2008
  • wang_jing_2008
  • 2012年08月06日 15:18
  • 134

《深入理解c++对象内存模型》读书笔记

this指针的由来,虚函数的编译,多态的本质
  • FANYIYAO980404514
  • FANYIYAO980404514
  • 2015年03月29日 22:05
  • 1345

深入理解C++指针

相信C++中指针是大家比较容易出错和难以理解的地方,本文尝试从内存地址的角度,作一些探讨。...
  • jeffscott
  • jeffscott
  • 2016年04月12日 17:43
  • 270

深入理解C++ mutable

mutalbe的中文意思是“可变的,易变的”,跟constant(既C++中的const)是反义词。   在C++中,mutable也是为了突破const的限制而设置的。被mutable修饰的变...
  • lingtianyulong
  • lingtianyulong
  • 2013年04月18日 21:15
  • 562

深入理解C++的指针和引用

每位学习过C++的程序员都知道指针其实就是地址(这样理解是不完全正确的,但也无可厚非,为了方便暂且这么理解着吧)。在C++中引用的内在表现其实也是地址,但引用和指针的外在表现是不同的。也就是说从汇编语...
  • ACMwsj
  • ACMwsj
  • 2014年05月15日 16:38
  • 479
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深入理解C++中的mutable关键字
举报原因:
原因补充:

(最多只允许输入30个字)