挥发物

类型限定符; 应用于类型时,生成类型的 volatile 限定版本。挥发性限定与类型系统中的 const 限定具有相同的作用,但是 volatile 不会阻止对象被修改; 相反,它强制编译器将对这些对象的所有访问视为副作用。

在下面的示例中,如果 memory_mapped_port 不是易失性的,编译器可以优化函数,使其仅执行最终写入,如果 sizeof(int) 大于 1 则不正确 .volatile 资格强制它将所有 sizeof(int) 写入视为不同的一侧效果,因此执行所有这些(按顺序)。

extern volatile char memory_mapped_port;
void write_to_device(int x) {
    const char* p = reinterpret_cast<const char*>(&x);
    for (int i = 0; i < sizeof(int); i++) {
        memory_mapped_port = p[i];
    }
}