2017-04-04 100 views
0

從我已閱讀在網絡上和SO:C++常量VS揮發性

常量:

  • 告訴變量不能使用 程序指令來改變編譯器。
  • 因此,編譯器可以優化代碼。

揮發性:

  • 變量是恆定的,但可以是從程序外面改變。
  • 告訴編譯器每次從內存中讀取變量的值。
  • 告訴編譯器不要對這個變量使用優化。

如果我的理解是正確的,那麼volatile就是另一種const。

那麼,下面的一行是什麼意思?

const volatile char A = 'C';

+2

此外,易失性意味着變量可以從其它源被更新,不只是從CPU(例如,外設寄存器在微控制器可以從GPIO或其他任何更新),所以喲你需要用指針來讀取它們。 – tilz0R

+10

*變量是恆定的,但可以從程序外部改變*不正確。一個易失變量可以被修改。 – NathanOliver

+0

@FrançoisAndrieux一些編譯器會將'const'變量放到非易失性存儲器中,這樣做可能會導致設備崩潰。 – tilz0R

回答

9

沒有,volatile不是 「另一種const」。 volatile確實不是的意思是「變量是恆定的」。

否則,你的觀點是準確的。所以,const volatile指:

  1. 從其初始化之後修改該對象防止編程(這是const一部分)
  2. 外部機制仍可能修改它的值,因此其必須從「存儲器」的每個被檢索時間的讀請求,而不是由最佳化被高速緩存(這是volatile一部分)