explicit、volatile、mutable关键字

    科技2022-08-21  106

    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成员变量进行修改了。

    Processed: 0.018, SQL: 9