类的成员函数不会改变对象的状态,那么这个成员函数通常会声明成const的。可是,有些时候,咱们须要在const的函数里面修改一些跟类状态无关的数据成员,那么这个数据成员就应该被mutalbe来修饰。编程
mutable在类中只可以修饰非静态数据成员。多线程
mutable则是为了能突破const的封锁线,让类的一些次要的或者是辅助性的成员变量随时能够被更改。const和mutable关键字只是给了建模工具更多的设计约束和设计灵活性。函数
volatile修饰的数据,编译器不可对其进行执行期寄存于寄存器的优化。这种特性,是为了知足多线程同步、中断、硬件编程等特殊须要。遇到这个关键字声明的变量,编译器对访问该变量的代码就再也不进行优化,从而能够提供对特殊地址的直接访问。工具