2017-04-04 82 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一部分)