在C++中,volatile处理方式相同const:将指向volatile数据的指针传递给不希望volatile修饰符触发编译错误的函数.
int foo(int* bar) { /* snip */ }
int main()
{
volatile int* baz;
foo(baz); // error: invalid conversion from ‘volatile int*’ to ‘int*’
}
Run Code Online (Sandbox Code Playgroud)
为什么危险?对于const修饰符来说,删除它可能会破坏const正确性; 但是有" volatile正确性"之类的东西吗?我无法弄清楚如何将指向易失性数据的指针作为非易失性数据的指针传递可能会导致问题.
编辑只是让你们知道我为什么volatile在第一时间使用:许多Mac OS X的OSAtomic函数系列(用于原子增量,减量,加法,减法,比较和交换等)都需要volatile参数.