volatile用来声明那些可能在你的程序本身不知道的情况下会发生改变的变量。
一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。
精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。
对于一般变量:为提高存取速度,编译器优化时有时会先把变量读取到一个寄存器中。以后再取变量值时,就直接从寄存器中取值。
volatile 作用是避免编译器优化,说明它是随时会变的,它不是 non-const,和const不矛盾。被const修饰的变量只是在当前作用范围无法修改,
但是可能被其它程序修改。所以
const volatile int i = 0; 表示:任何对i的直接修改都是错误的,但是i可能被意外情况修改掉,不要做无意义的优化。