const和volatile放在一起的意义在于:

(1)本程序段中不能对a作修改,任何修改都是非法的,或者至少是粗心,编译器应该报错,防止这种粗心;
(2)另一个程序段则完全有可能修改,因此编译器最好不要做太激进的优化。

“const”含义是“请做为常量使用”,而并非“放心吧,那肯定是个常量”。
“volatile”的含义是“请不要做没谱的优化,这个值可能变掉的”,而并非“你可以修改这个值”。
因此,它们本来就不是矛盾的。

const修饰的变量不允许这里修改不代表不允许别处修改,比如:
int i = 5;
const int* p = &i;
*p = 6; // 不可以;
i = 7; // 完全可以,而且那个“const”的“*p”也跟着变成了7。

对于非指针非引用的变量,const volatile同时修饰的意义确实不大。个人觉得。

需要明白“volatile”的含义并非是“non-const”。所以他们才可以放在一起。
在C++语言中,const没有反义词,如果一个变量没有const修饰,那它本身就是const的反义词,而并非加上volatile才是const的反义词。

两者同时修饰一个对象的典型情况,是用于驱动中访问外部设备的只读寄存器。

http://topic.csdn.net/u/20071210/14/321d6ec5-f967-4afb-8d04-b335e6db7b34.html

http://hi.baidu.com/honky/item/b42b278abbb820864414cf83

留一个问题:const volatile int i=10;这行代码有没有问题?如果没有,那 i 到底是什么 属性?

回答一:没有问题,例如只读的状态寄存器。它是volatile,因为它可能被意想不到地改变;它是const,因为程序不应该试图去修改它。volatile和const并不矛盾,只是控制的范围不一样,一个在程序本身之外,另一个是程序本身。

回答二:没问题,const和volatile这两个类型限定符不矛盾。const表示(运行时)常量语义:被const修饰的对象在所在的作用域无法进行修改操作,编译器对于试图直接修改const对象的表达式会产生编译错误。volatile表示“易变的”,即在运行期对象可能在当前程序上下文的控制流以外被修改(例如多线程中被其它线程修改;对象所在的存储器可能被多个硬件设备随机修改等情况):被volatile修饰的对象,编译器不会对这个对象的操作进行优化。一个对象可以同时被const和volatile修饰,表明这个对象体现常量语义,但同时可能被当前对象所在程序上下文意外的情况修改。

转自:http://blog.csdn.net/qq306013411/article/details/8013044

转载于:https://www.cnblogs.com/li-ning/p/9489997.html

const volatile同时限定一个类型int a = 10相关推荐

  1. Java——有一个抽奖池,该抽奖池中存放了奖励的金额,该抽奖池用一个数组int[] arr = {10,5,20,50,100,200,500,800,2,80,300}

    有一个抽奖池,该抽奖池中存放了奖励的金额,该抽奖池用一个数组int[] arr = {10,5,20,50,100,200,500,800,2,80,300}; 创建两个抽奖箱(线程)设置线程名称分别 ...

  2. 有一个抽奖池,该抽奖池中存放了奖励的金额,该抽奖池用一个数组int[] arr = {10,5,20,50,100,200,500,800,2,80,300};创建两个抽奖箱(线程)...

    有一个抽奖池,该抽奖池中存放了奖励的金额,该抽奖池用一个数组int[] arr = {10,5,20,50,100,200,500,800,2,80,300};     创建两个抽奖箱(线程)设置线程 ...

  3. c语言const 修饰二级指针,C++中const修饰二级指针(从类型‘int**’到类型‘const int**’的转换无效)...

    先上代码: void func(const int ** arg) { } int main(int argc, char **argv) { int **p; func(p); return 0; ...

  4. java整数类型int字面值_JavaKotlinAndroidGuide

    Java是一种强类型化的语言,每个变量都有一种类型,每个表达式也都有一种类型,并且每一种类型都是严格定义的.所有的赋值操作不管是显式的还是在方法中调用中通过参数传递的,都要经过类型兼容性检查 一.基本 ...

  5. C语言 const、volatile、const volatile限定符理解

      在C语言经常会用到变量类型限定符const和volatile,但是const和 volatile也可以一起使用.下面就一次分析一下这三种情况的使用方法. 1.const   从字面意思理解,意思就 ...

  6. “将‘const NSString *‘发送到‘NSString *‘类型的参数会丢弃限定符”警告

    本文翻译自:"sending 'const NSString *' to parameter of type 'NSString *' discards qualifiers" w ...

  7. const volatile int i=10

    这是C语言深度剖析里面的一个问题P35. 在网上查了下,感觉讲得不够简洁.这里我来小结一下: const修饰的是只读变量,变量在初始化被赋了初值就不能被改变,就是 readonly变量了. valat ...

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

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

  9. c语言变量起别名,typedef可以与此同时为一个类型起两个别名

    typedef可以同时为一个类型起两个别名? 本帖最后由 syrchina 于 2013-12-05 11:30:47 编辑 typedef struct { int x; int y; }name1 ...

最新文章

  1. 用Python解“支票问题”题
  2. 正则表达式 perl
  3. 有关identity的小技巧
  4. 数组指针和指针数组,函数指针和指针函数,常量指针和指针常量,常量引用
  5. HTML基础-张晨光-专题视频课程
  6. 代码自解释不是不写注释的理由
  7. Windows平台基于RTMP实现一对一互动直播
  8. java 多队列_java多线程实现简单队列
  9. 用Java搭建一套访问redis的API
  10. 使用flask开发web应用
  11. element ui输入地内容明明符合规则还是校验报错
  12. 3.3 神策数据分析平台
  13. CVE-2021-1675 Print Spooler漏洞复现远程执行及提权
  14. C# 正则表达式数字匹配
  15. 郭天祥的10天学会51单片机_第九节
  16. 苹果id注册显示无法连接服务器失败原因,apple id连接服务器失败怎么办
  17. 重磅!朱松纯加入北京大学,此前曾传拟加入清华
  18. java程序设计方法
  19. html5实现像素鸟,有趣的Axure案例:像素鸟游戏的设计
  20. 计算机生成全息投影代码,常见的投影控制代码 汇总 1

热门文章

  1. 2、ACE-实用生活口语-介绍 Introductions
  2. .net c# 正则表达式 平衡组/递归匹配
  3. 层展开/关闭 - 运动缓冲效果
  4. 异构平台同步(mysql--oracle)
  5. UI 和 UX,区别在哪里?
  6. Spring Framework------version4.3.5-----Reference学习心得-----总结
  7. ssh 别名登录小技巧
  8. IIS Server is too busy 解决方法(IIS6)
  9. 乡巴佬GHOST WIN7 SP1 旗舰版32位
  10. 纯PB9开发短文本加密