语言基础(11):mutable与const、volatile
1、关键字语义
1、用const修饰的对象,只能访问该类中用const修饰的成员函数,而其它的成员函数是不能访问的。用volatile修饰的对象,只能访问该类中用volatile修饰的成员函数,不能访问其它的成员函数。
当希望成员函数只能引用成员数据的值,而不允许成员函数修改数据成员的值时,可用关键词const修饰成员函数。
2、在成员函数的前面加上关键字const,则表示这函数返回一个常量,其值不可改变。
const成员函数则是指将const放在参数表之后,函数体之前,其一般格式为:
FuncName(type args>) const;
其语义是指明这函数的this指针所指向的对象是一个常量,即规定了const成员函数不能修改对象的数据成员,在函数体内只能调用const成员函数,不能调用其它的成员函数。
3、类里面的数据成员用mutable修饰,即使修饰为const的成员函数也可以修改它。
mutable type var;
4、用volatile修饰一个成员函数时,其一般格式为:
FuncName(type args>) volatile;
其语义是指明成员函数具有一个易变的this指针,调用这个函数时,编译程序把属于此类的所有的数据成员都看作是易变的变量,编译器不要对这函数作优化工作。
由于关键字const和volatile是属于数据类型的组成部分,因此,若在类定义之外定义const成员函数或volatile成员函数时,则必须用这二个关键字修饰,否则编译器认为是重载函数,而不是定义const成员函数或volatile成员函数。
2、应用场景
1、const保护类的成员变量不在成员函数中被修改,是为了保证模型的逻辑正确,通过用const关键字来避免在函数中错误的修改了类对象的状态。
2、mutable则突破const的封锁线,让类的一些次要的或者是辅助性的成员变量随时可以被更改。
3、const和mutable关键字只是给了建模工具更多的设计约束和设计灵活性,而且程序员也可以把更多的逻辑检查问题交给编译器和建模工具去做,从而减轻程序员的负担。
4、volatile主要对类对象使用volatile 易变性、不可优化、顺序性