珠宝首饰网站建设规划书,专业网页制作多少钱,软件如何推广,wordpress 焦点图大小1、
mutalbe的中文意思是“可变的#xff0c;易变的”#xff0c;跟constant#xff08;既C中的const#xff09;是反义词。在C中#xff0c;mutable也是为了突破const的限制而设置的。被mutable修饰的变量(mutable只能由于修饰类的非静态数据成员)#xff0c;将永远处于…1、
mutalbe的中文意思是“可变的易变的”跟constant既C中的const是反义词。在C中mutable也是为了突破const的限制而设置的。被mutable修饰的变量(mutable只能由于修饰类的非静态数据成员)将永远处于可变的状态即使在一个const函数中。mutable 只能用于类的非静态和非常量数据成员。我们知道假如类的成员函数不会改变对象的状态那么这个成员函数一般会声明为const。但是有些时候我们需要在const的函数里面修改一些跟类状态无关的数据成员那么这个数据成员就应该被mutalbe来修饰。class Student{public:Student(){}~Student(){}Student( int _age):age(_age){}public:int getAge() const{age; // 在const函数里试图修改编译报错return age;}private:string name;int age;};上面代码在编译时报“error C2166: 左值指定 const 对象”错误。在上面的例子中const类型的getAge()函数中改变了类的非静态数据成员age。因此这个时候需要使用mutable来修饰一下要在const成员函数中改变的非静态数据成员将上述代码改为class Student{public:Student(){}~Student(){}Student( int _age):age(_age){}public:int getAge() const{age; //mutable修饰的变量能在const函数中修改return age;}private:string name;mutable int age;};这样编译能通过了。个人总结下1mutable关键字只能作用于类的非静态和非常量数据成员。2mutable关键字提示编译器该变量可以被雷的const函数修改。3在一个类中用mutable修饰的变量只能是少数或者根本不使用mutable。
在本人做的项目中很少用到mutable关键字的一般是采用get()/set()方法进行修改成员对象的值。
2、volatile 一个定义为volatile的变量可能会被意想不到地改变而影响编译器编译的结果这样编译器就不会去假设这个变量的值了。 精确地说就是优化器在用到这个变量时必须每次都小心地重新读取这个变量的值。 也就是说当编译器访问该volatile变量时每次都从内存中读取该变量的值。 下面是volatile变量的几个例子 1). 并行设备的硬件寄存器如状态寄存器 2). 一个中断服务子程序中会访问到的非自动变量(全局变量、静态变量) 3). 多线程应用中被多任务共享的变量 int square(volatile int *ptr) { int a,b; a *ptr; b *ptr; return a * b; } 由于*ptr的值可能被意想不到地该变因此a和b可能是不同的。结果这段代码可能返不是你所期望的平方值正确的代码如下 long square(volatile int *ptr) { int a; a *ptr; return a * a; } 今天的介绍就先到这里后续研究之后再更新。