天天看點

mutable和volatile

mutable變量永遠處于可變的狀态

mutable在類中隻能修飾非靜态資料成員,即使是在const函數中,甚至是const結構體變量或類對象,其mutable成員也可以被修改

我們知道,如果類的成員函數不會改變對象的狀态,那麼這個成員函數一般會聲明成const的。但是,有些時候,我們需要在const的函數裡面修改一些跟類狀态無關的資料成員,那麼這個資料成員就應該被mutalbe來修飾

volatile是一個類型修飾符,它的原意是“易變的”,這種解釋容易誤導人,我覺得解釋為“直接存取原始記憶體位址”比較合适

volatile修飾的變量,編譯器不可對其進行執行期寄存于寄存器的優化,這種特性是為了滿足中斷,多任務環境各任務間共享的變量的需要,這些變量可能在編譯器未知的情況下值被改變,而編譯器繼續從寄存器去存取該變量的值,就會導緻錯誤的結果

被volatile關鍵字聲明的變量,編譯器對通路該變量不再進行優化,直接從記憶體位址存取