【C++ const与volatile】

C++ const与volatile

volateile的含义是不稳定的,易变的。在C++里,表示变量的值可能会以难以察觉的方式(比如操作系统信号、外部其他的代码)被修改,所以禁止编译器进行任何形式的优化,每次使用的时候都必须老老实实的去取值。

const volatile int MAX_LEN = 1024;
auto ptr = const_cast<int*> (&MAX_LEN);
*ptr = 2048; 
std::cout << "MAX_LEN: " << MAX_LEN << "\n";

这段代码最开始定义的常数MAX_LEN为1024,最后的输出却为2048,但如果去掉volatile修饰,则最后会输出1024。MAX_LEN虽然是只读变量,但有volatile修饰,就表示它不稳定,可能会悄悄改变。编译器在生成机器码的时候,就不会再去进行那些可能有副作用的优化,也就是说编译器不会再去把MAX_LEN替换为1024,而是生成去内存取值的CPU指令,到实际运行的时候MAX_LEN已经通过指针被强制修改了,所以上面的那段代码最后输出的是2048,而不是1024。

最好把const理解成read only,把变量标记成const可以让编译器更好的进行优化。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值