Ref
cppreference - const vs volatile
C/C++中volatile关键字详解
volatile
以下来自谷歌翻译
int a=5;
int b=a;//第一次访问
//....
a=a+1;//第二次访问
当数据a被放到寄存器中去后,并且下次再次访问此数据期间,编译器没有察觉到数据发生变化,默认会进行优化,再次访问时直接从寄存器中取数据,而不是到内存中取数据,假如在两次显式访问此数据之间,存在编译器察觉不到的对a的修改,那么此修改不会反映到第二次数据访问,就会发生语义上的错误。
而如果在声明a时添加上volatile
关键字,就告诉编译器每次访问数据都要到数据对应的内存位置去获取,不要进行寄存器优化。