volatile:易变的,在编译器认识的范围之外,这个值时可以改变的。

主要用来多线程编码方式中

推荐一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子:

一个变量可以 用 const volatile 一起修饰

const volatile int i=10; 是可以的,它的意思是 程序员不能改变这个对象,但是外部环境可以改变。

举个简单的例子来说明

int main()
{

const int i=10;
 cout<<i<<endl;
 *((int*)&i)=11;
 cout<<i<<endl;
 return 0;

}

运行结果

分析 编译器 发现 变量i 是const ,即认为i在当前作用域范围之内值是不会改变的,把变量id的值存到寄存器里,以后读取的时候直接读。而 *((int*)&i)=11;进行强制修改了i的值,但是输出结果还是10;

如果代码 改为

int main()
{

const volatile int i=10;   
 cout<<i<<endl;
 *((int*)&i)=11;
 cout<<i<<endl;
 return 0;

}

运行结果:

转载于:https://blog.51cto.com/lihaichuan/1186642

volatile的用法相关推荐

  1. java volatile实例_Java的Volatile实例用法及讲解

    Java的Volatile实例用法及讲解 发布时间:2020-10-03 12:01:58 来源:脚本之家 阅读:88 作者:konami 在原子性.可见性.有序性中,volatile关键字主要在可见 ...

  2. C语言中的关键字“ volatile”的用法(摘)

    C语言中的关键字" volatile"的用法(摘) volatile 这个ANSI C 关键字在经典的C 教程中很少提及,高层编程的人也可能永远都 不会用到,但是作为嵌入式开发者来 ...

  3. 嵌入式开发中关键字_IO 和 volatile的用法

    一.描述 在开发嵌入式过程中,常会看到_IO 修饰符,这两个修饰符是在Core_cm3.h中被重定义: /* IO definitions (access restrictions to periph ...

  4. [转] C++中 const, volatile, mutable用法

    const.volatile.mutable的用法 const修饰普通变量和指针 const修饰变量,一般有两种写法: const TYPE value; TYPE const value; 这两种写 ...

  5. java $ 用法_Java的Volatile实例用法及讲解

    在原子性.可见性.有序性中,volatile关键字主要在可见性中发挥作用. volatile声明的变量对所有线程来说是可见的,就是说当变量的值发生改变的时候,其他线程可以立马发现这个变化. publi ...

  6. C#中volatile的用法

    恐怕比较一下volatile和synchronized的不同是最容易解释清楚的.volatile是变量修饰符,而synchronized则作用于一段代码或方法:看如下三句get代码: int i1;  ...

  7. (转)KEIL里 Volatile的用法

    volatile用于防止相关变量被优化. 例如对外部寄存器的读写.对有些外部设备的寄存器来说,读写操作可能都会引发一定硬件操作,但是如果不加volatile,编译器会把这些寄存器作为普通变量处理,例如 ...

  8. static和volatile的用法

    关于volatile关键字的说明以及测试(转载) volatile关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素更改,比如:操作系统.硬件或者其它线程等.遇到这个关键字声明的 ...

  9. volatile用法详解

    我在 开发 中也常常遇到这个问题,发现通常用在两个方面,一方面 是 对 硬件 寄存器 或固定内存 的 访问,一般要用到,这就是我们常常在寄存器的头 文件 常常看到的,另一个就是在 多 线程,或主 程序 ...

最新文章

  1. 汉字转换成全拼的拼音
  2. 根据gtf格式的基因注释文件得到人所有基因的染色体坐标
  3. Android之记录并研究Volley框架中知识点
  4. 【Tools】WireShark3.2安装教程详解
  5. 《线程管理:传递参数、确定线程数量、线程标识》
  6. 中国移民去哪儿 新京报
  7. 美国住宅保修公司新增支持加密货币支付,并决定将 BTC 列入资产负债表
  8. 实验9-编程显示字符串
  9. 语音识别基本原理介绍--gmm-hmm中训练的完整版
  10. 隐马尔科夫模型 和动态贝叶斯网络
  11. 基于吸盘的scara机械臂
  12. [机器学习必知必会]泛化误差率的偏差-方差分解
  13. 《如何阅读一本书》章节要点整理
  14. CleanMyMac最新破解安装版
  15. @Deprecated 的功能
  16. 夫妻贷款买房需要注意什么
  17. ajax的响应与取消响应
  18. QNAP(威联通)联合创始人郭博达先生一行到访
  19. nginx 解决504超时问题
  20. 如何在IDEA中创建web项目并且部署到Tomcat中

热门文章

  1. 干货|十大产业方向深度解析!《2020科技产业趋势报告》
  2. 华为云BU总裁:如何把AI从噱头变为生产力?
  3. 深度学习的核心:掌握训练数据的方法
  4. 任正非最新讲话透露:华为在加快开发统一的人工智能平台
  5. 青岛程序员加班看不上球赛崩溃,外卖小哥伸出援手:我帮你改代码
  6. 无法启动MySQL数据库
  7. 二十二:制作app的时候超出部分不能滑动
  8. 极速理解设计模式系列:23.装饰器模式(Decorator Pattern)
  9. Git Merge VS Rebase
  10. 利用watch在小程序中实现全局状态共享