参考 https://blog.csdn.net/FX677588/article/details/74615658
1、在C++中,mutable是为了突破const的限制而设置的。被mutable修饰的变量,将永远处于可变的状态,即使在一个const函数中,甚至结构体变量或者类对象为const,其mutable成员也可以被修改,对业务逻辑的约束
2、volatile是一个类型修饰符。volatile修饰的数据,编译器不可对其进行执行期寄存器于寄存器的优化。这种特性,是为了满足多线程同步、中断、硬件编程等特殊需要。遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的直接访问,对编译器的优化约束