explicit关键字:禁止隐式生成临时对象
class Test
{
public:
explicit Test(int a
):ma(a
)
{}
private:
int ma
;
};
这个时候再生成Test = 30;这种对象就会报错。
volatile关键字的作用:禁止代码优化 int a = 10; int b = a; mov a ==> eax eax ==> b int c = a; mov a ==> eax eax ==> c 这个是没有代码优化的,代码优化过后应该是4条指令变成3条,即mov a ==> eax不用重复做 但是这个程序优化在单线程的情况下是没有问题的;如果是多线程优化,在赋值b后,eax中的值被修改 就会出现优化不正确的情况,所以这个时候就应该用volatile关键字
mutable关键字:去除常性
class Test
{
public:
Test(int a
,int b
)
{
ma
= a
;
mb
= b
;
}
int ma
;
int mb
;
};
int main()
{
const Test
test(10,20);
test
.ma
= 100;
}
这种修改明显是错误的,因为对象是常性的。
解决方法:比如要修改ma的值,就在int ma;前面田间关键字mutable就可以实现对长对象的ma成员变量进行修改了。