volatile的意思是易变的,用来修饰变量和const是相反的。注意:它们不能同时修饰一个变量。
作用:
使用volatile修饰的变量,编译器不会进行优化,因为有时为了追求速度和性能,编译器会临时存储变量到寄器,因为cpu从寄存器取变量的值比直接从内存中取变量的值快,程序在使用这个变量的时候就直接到寄存器中取得。但是这样的话,会导致一个问题,就是比如在一个多线程的程序中,这个线程使用这个保存在寄存器的值,但是其它线程已经改变了存储在内存的值,那么这个寄存器的值就是无效的。如果用volatile修饰了的话,编译器不 会做优化,每次取值必须到内存中去取值,这样的坏处就是付出了时间的代价,具体怎么使用,就要看场合了,我用的不多,所以在什么情况用,什么情况又不用,没什么经验,呵呵,又有点囫囵吞枣了。
补充:
mutable int a;
代表一个类的常成员函数,例如,void GetSomething() const; 可以修改该成员。
void GetSomething() const
{
a = 0;
}
如果不加mutable,编译失败。