C++中的mutable和const

原创 2004年05月10日 12:20:00

    声明:这里讨论的const是用来修饰函数的const,而不是用来修饰变量的const。虽然是同一个关键字,但yayv还是觉得把他们当作2个关键字来理解更好一些。

    C++中const关键字用来表示一个常量,同时const也用来修饰函数。yayv在这个要明确的概念是:const所修饰的函数只能是类的成员函数,因为const所修饰的函数中,要由编译器负责保护类的成员变量不被修改。而相对的,mutable则是用来修饰类的成员变量,让该变量在const所修饰的成员函数中可以被修改。而且const修饰的函数只能是类的成员函数,mutable修饰的变量只能是类的成员变量。简直就是一对冤家对头~

这里出现了3个问题:

第一:为什么要保护类的成员变量不被修改

第二:为什么用const保护了成员变量,还要再定义一个mutable关键字来突破const的封锁线?

第三:到底有没有必要使用const 和 mutable这两个关键字?

    yayv对这三个问题的看法是:

    保护类的成员变量不在成员函数中被修改,是为了保证模型的逻辑正确,通过用const关键字来避免在函数中错误的修改了类对象的状态。并且在所有使用该成员函数的地方都可以更准确的预测到使用该成员函数的带来的影响。

    而mutable则是为了能突破const的封锁线,让类的一些次要的或者是辅助性的成员变量随时可以被更改。

    没有使用const和mutable关键字当然没有错,const和mutable关键字只是给了建模工具更多的设计约束和设计灵活性,而且程序员也可以把更多的逻辑检查问题交给编译器和建模工具去做,从而减轻程序员的负担(yayv觉得这只不过是把负担移交给了设计人员~, :(,并没有降低任何工作量 )。

   如果开发过程有比较严格的迭代过程,使用这两个关键字应该更能体现出他们的作用。

C++回顾之const对象、const成员函数、mutable类型

总结const的各种用法,主要讲述const对象,及const 成员函数,还有mutable修饰的数据成员...
  • ab198604
  • ab198604
  • 2014年02月08日 11:02
  • 3500

C++ 之 explicit,mutable,volatile 浅析

explicit:放在构造函数前面可以阻止构造函数的隐式类型转换。这样可以避免不必要的错误。 violate:告诉编译器不要去假定这个变量的值,因为它随时可能会改变。这是为了阻止某些编译器的优化策略...
  • u013630349
  • u013630349
  • 2015年09月07日 20:24
  • 808

const成员函数和mutable

const成员函数和mutable 标签: iostreamconstructorclasslistc 2010-05-05 10:14 1154人阅读 评论(0) 收藏 举报 ...
  • boshuzhang
  • boshuzhang
  • 2016年06月26日 13:00
  • 285

const_cast与mutable

const_cast: 1.作用:用于去除对象的const限定 2.用法:const_cast (expression) //type_id必须是指针或者引用 举例: class Test  ...
  • ly52352148
  • ly52352148
  • 2016年05月22日 15:25
  • 307

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
  • 15221

c++ 中mutable的用法

multable虽然在日常的工作中很少用到,但是毕竟multable属于c++语法中的一个关键自所以,在大多数的面试中经常被提到,所以如果你要重新找工作了还是要了解这个关键字的 再了解multable...
  • Cyang_liu
  • Cyang_liu
  • 2017年03月23日 21:24
  • 351

bitwise constness与logical constness【EC++笔记】

当成员函数为const时 constness(常量性) bitwise constness:不更换对象内任何一个字节,编译器判断成员变量没有赋值动作即可。 不足: class test { p...
  • CrazysPopcorn_qian
  • CrazysPopcorn_qian
  • 2015年04月07日 11:06
  • 547

C++ 中的 mutable 关键字

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

mutable在c++中的用法

在C++语言中,mutable是C++语言中的关键字,可以修饰一个成员变量,就像static,const等修饰一个变量一样(注意:如果一个结构体或者是类的成员变量被static或者const修饰的话,...
  • zhangbinsijifeng
  • zhangbinsijifeng
  • 2015年06月04日 19:25
  • 1522
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++中的mutable和const
举报原因:
原因补充:

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