`
baicai
  • 浏览: 7139 次
  • 性别: 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>

分享到:
评论

相关推荐

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

    在C++编程语言中,`mutable`关键字是一个特殊的关键字,它的主要作用是允许在const成员函数中修改对象的某些特定成员变量。这在某些情况下非常有用,因为const成员函数通常承诺不改变对象的状态,但有时我们需要在...

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

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

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

    总的来说,`mutable`和`volatile`都是C++中用于特定目的的关键字。`mutable`是为了在const上下文中修改对象的非关键状态,而`volatile`则确保了对可能由外部因素改变的变量的正确访问。理解并恰当使用这两个关键字...

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

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

    c++关键字mutable深入解析

    在C++编程语言中,`mutable`是一个特殊的关键字,它的主要作用是允许在const成员函数内部修改对象的成员变量。通常,const成员函数承诺不修改对象的状态,但`mutable`关键字提供了一种机制,使得程序员可以在保持...

    C++11新特性.pdf

    * mutable:用来说明是否可以修改捕获的外部变量,mutable关键字为一个修饰符,在默认情况下,lambda函数总是返回一个const,而当我们在形参列表后面加了mutable关键字后,则可以取消这种默认常量设置,当以传值方式...

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

    主要给的阿加介绍了关于C++中mutable与volatile的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    c++关键字解释

    在深入探讨C++的关键字之前,我们先简要回顾一下C++作为一种静态类型的、通用的...以上是C++中部分关键字的详细解析,这些关键字是构建复杂和高效程序的基础,理解和熟练运用它们对于成为一名优秀的C++程序员至关重要。

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

    在C++编程语言中,有几个不常用但重要的关键字,本文将深入探讨其中的`mutable`和`volatile`关键字。 首先,`mutable`关键字用于类的非静态数据成员,它的主要作用是在const成员函数中允许修改对象的状态。通常,当...

    多个关键字标准C++应用程序

    标题中的“多个关键字标准C++应用程序”意味着我们要讨论的是使用C++编程语言开发的应用程序,这些应用程序可能涉及了C++中的多个关键特性。C++是一种强类型、静态类型的编程语言,它提供了丰富的语法结构和高级编程...

    More-Effective-CPP_cn.zip_模板类

    3. **mutable关键字**:在C++中,类的成员变量默认为const,一旦声明为const,在类的非静态成员函数中就不能修改。但是,有时候我们希望在不改变对象状态的情况下改变某些内部辅助数据,这时候就可以使用mutable...

    C++ 程序员学习过程

    - 理解 C++ 中的关键特性,包括友元(friend)、虚函数(virtual)/运行时类型识别(RTTI)、const 和 mutable 关键字、异常(exception)处理以及模板(template)。 2. **阅读《C++ Primer》**: - 这本书适合初学者,...

    Effective C++中文第三版清晰.zip

    9. **成员函数**:了解静态成员函数与非静态成员函数的区别,以及const成员函数和mutable关键字的应用。 10. **命名空间**:命名空间用于避免名字冲突,合理使用std命名空间,以及使用using声明和using指令。 11. ...

    C++复习大全资料

    ### C++复习大全知识点解析 #### 一、C++概述与发展历史 C++是一种由Bjarne Stroustrup博士在1980年开始研发的面向对象的编程语言,旨在为C语言...对于学习和掌握C++的开发者来说,深入理解这些核心概念至关重要。

    关于const在C++中的用法

    关于`const`在C++中的用法,是一个深入理解C++编程语言的关键点。`const`关键字在C++中主要用于声明常量或者指定某个变量、指针或成员函数的某些特性不可修改,它增强了代码的安全性和可读性,同时也提高了程序的...

    高效C++中级编程教程

    这份教程旨在深化对C++编程思想的理解,特别是面向对象的编程思想,以及这一思想在实际编程中的应用技巧。教程内容丰富,涵盖了C++语言特性和高级特性,通过实例解析,使读者能够更深入、更完美地掌握C++的优势和...

    effective C++简要内容

    C++是一种多范式编程语言,它不仅支持过程式编程和面向...通过掌握书中的建议,读者能提升对C++语言的深入理解,提高代码质量并避免常见的编程错误。以上简要内容涵盖了书籍中的几个核心知识点,可作为快速学习的起点。

    Effective_C++3 学习笔记.pdf.rar

    3. **常量与引用**:笔记会阐述常量对象的使用规则,以及常量引用如何增强程序的安全性和可读性,同时讲解const成员函数和mutable关键字的用途。 4. **运算符重载**:C++允许用户为自定义类型重载运算符,笔记会...

Global site tag (gtag.js) - Google Analytics