揮發物

型別限定符; 應用於型別時,生成型別的 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];
    }
}