`
baicai
  • 浏览: 6924 次
  • 性别: Icon_minigender_2
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

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

阅读更多
 

深入理解C++中的mutable关键字[转]<o:p></o:p>

<o:p> </o:p>

寒星轩 BLOG | 2006-12-18 10:39:18 | <o:p></o:p>

:mutalbe的中文意思是可变的,易变的,跟constant(既C++中的const)是反义词。 <o:p></o:p>

  mutalbe的中文意思是可变的,易变的,跟constant(既C++中的const)是反义词。

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

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

  下面是一个小例子: <o:p></o:p>

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

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

void OutputTest(const ClxTest& lx)
{
 lx.Output();
}<o:p></o:p>


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

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

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

  下面是修改过的代码:<o:p></o:p>

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;
}<o:p></o:p>


  计数器m_iTimesmutable修饰,那么它就可以突破const的限制,在被const修饰的函数里面也能被修改。 <o:p></o:p>

<o:p> </o:p>

分享到:
评论

相关推荐

    volatile关键字 Const关键字 static关键字 mutable 关键字

    C/C++ 嵌入式 一些关键字: volatile关键字 Const关键字 static关键字 mutable 关键字

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

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

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

     在C++中,mutable也是为了突破const的限制而设置的。被mutable修饰的变量,将永远处于可变的状态,即使在一个const函数中。  我们知道,如果类的成员函数不会改变对象的状态,那么这个成员函数一般会声明成...

    C++基本功:全面掌握const、volatile和mutable关键字.docx

    C++基本功:全面掌握const、volatile和mutable关键字

    浅谈C++中的mutable和volatile关键字

    下面小编就为大家带来一篇浅谈C++中的mutable和volatile关键字。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    C++中volatile和mutable关键字用法详解

    主要介绍了C++中volatile和mutable关键字用法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    深入理解C++中常见的关键字含义

    const:定义常成员,包括const数据成员和const成员函数,const数据成员必须,也只能通过构造函数的初始化列表进行初始化,const成员函数只能访问类的成员,不能进行修改,如果需要修改,则引入下面的mutable关键字。...

    c++关键字mutable深入解析

    先说用法,mutable关键字只能修饰非静态以及非常量成员变量,使用mutable修饰的成员变量在const函数中的值是可以修改的

    C++关键字大全(67个).txt

    C++关键字大全(67个) asm auto bad_cast bad_typeid bool break case catch char class const const_cast continue default delete do double dynamic_cast else enum except explicit extern false finally float ...

    C++中mutable与volatile的深入理解

    C++中修饰数据可变的关键字有三个:const、volatile和mutable。const比较好理解,表示其修饰的内容不可改变(至少编译期不可改变),而volatile和mutable恰好相反,指示数据总是可变的。mutable和volatile均可以和...

    聊聊C++的mutable和volatile

    C++中修饰数据可变的关键字有三个:const、volatile和mutable。const比较好理解,表示其修饰的内容不可改变(至少编译期不可改变),而volatile和mutable恰好相反,指示数据总是可变的。mutable和volatile均可以和...

    详解C++中mutable的用法

    主要介绍了详解C++中mutable的用法,帮助大家更好的理解和学习C++,感兴趣的朋友可以了解下

    深入分析C++中几个最不常用的关键字

    mutable关键字关键字mutable是C++中一个不常用的关键字,他只能用于类的非静态和非常量数据成员我们知道一个对象的状态由该对象的非静态数据成员决定,所以随着数据成员的改变,对像的状态也会随之发生变化!如果一个类...

    C++关键字详细使用

    long mutable namespace new operator private protected public register reinterpret_cast return short signed sizeof static static_cast struct switch template this throw true try type_info typedef typeid...

Global site tag (gtag.js) - Google Analytics