【C】——const和volatile可以并用吗?
答案是肯定的,可以一起用。
因为很多人误解了const的真正含义,很多初学者认为const修饰的就是常量,而常量不会改变,而既然不会改变,那volatile就没有意义。
但是实际上这正是对const的误读,const其实只是一种限制约定,也就是某个东西X不能由const修饰的变量来修改,但是这个X仍然可以被其他非const修饰的变量来修改,比如
int x;
int* p = &x;
const int* q = &x;
*p=0; //允许
*q=0; //错误
虽然p和q指向同一块内存,但是q的const并不能限制p的写入,也就是说const只是限制了q的写入,这是一种语法约定而已,并不表示q所指向的内存就是一个常量并且绝对不会改变。
如果能理解这一点,那么const和volatile放一起就并不奇怪了。而且这种用法在不同线程之间用来做一些状态控制也是偶尔有见到的。
【C】——const和volatile可以并用吗?的更多相关文章
- C++ const、volatile、mutable的用法 (转)
const.volatile.mutable的用法 鸣谢作者: http://blog.csdn.net/wuliming_sc/article/details/3717017 const修饰普通 ...
- C语言中关键字auto、static、register、const、volatile、extern的作用
原文:C语言中关键字auto.static.register.const.volatile.extern的作用 关键字auto.static.register.const.volatile.exter ...
- const、volatile、mutable的用法
http://blog.csdn.net/wuliming_sc/article/details/3717017 const.volatile.mutable的用法 const修饰普通变量和指针 co ...
- C++ 中 const、volatile、mutable的用法
@2019-01-14 [小记] C++中const.volatile.mutable的用法
- const与volatile
C或者C++基本上是按照从上到下.从左至右的顺序来读.但对于指针声明从某种意义上来讲是倒着的. C或者C++中每个声明都由两部分组成:零个或者多个声明说明符,一个或者多个用逗号隔开的声明符. cons ...
- void指针意义、Const、volatile、#define、typedef、接续符
1.C语言规定只有相同类型的指针才可以相互赋值. Void*指针作为左值用于接收任意类型的指针, void*指针作为右值赋给其他指针时需要强制类型转换. 2.在C语言中Const修饰的变量是只读的,本 ...
- 【C++】const、volatile不能修饰没有this指针的成员函数
一般所有的成员函数都只有一个复本,当不同的对象调用成员函数时,为了区分是哪个成员在调用,会传入this指针. 当调用有const.volatile修饰的成员函数时,会相应的传入一个const.vola ...
- C++的类型转换:static_cast、dynamic_cast、reinterpret_cast和const_cast(dynamic_cast还支持交叉转换,const_cast将一个类的const、volatile以及__unaligned属性去掉)
在C++中,存在类型转换,通常意味着存在缺陷(并非绝对).所以,对于类型转换,有如下几个原则:(1)尽量避免类型转换,包括隐式的类型转换(2)如果需要类型转换,尽量使用显式的类型转换,在编译期间转换( ...
- 第9课 - const 和 volatile分析
第9课 - const和volatile分析 1. const只读变量 (1)const修饰的变量是只读的,本质上还是变量,并不是真正意义上的常量 ※※ const只是告诉编译器该变量 ...
随机推荐
- 使用Talend Open Studio将数据分步从oracle导入到hive中
先使用Tos建立模型,将Oracle中的数据导入到本地: build job后,形成独立可以运行的程序: 将生成的zip文件,上传到hadoop集群上,有hive环境的机器上: [hive@h1 wo ...
- 怎么运行 ASP.NET Core控制台程序
aspnet test.dll
- Mongodb是用Sum 和Where条件
Sum 按照条件求和 db.aa.aggregate([ { $group: { _id: null, total: { $sum: "$value" } } }, //$valu ...
- Atitit 图像处理之编程之类库调用的接口api cli gui ws rest attilax大总结.docx
Atitit 图像处理之编程之类库调用的接口api cli gui ws rest attilax大总结.docx 1. 为什么需要接口调用??1 1.1. 为了方便集成复用模块类库1 1.2. 嫁 ...
- flexb布局图解
- [AWS vs Azure] 云计算里AWS和Azure的探究(1)
转自:http://www.cnblogs.com/hotcan/archive/2013/01/31/2886794.html 云计算里AWS和Azure的探究(1) 全球领先的云的计算平台主要有两 ...
- (转)Windows7安装OpenSSH
(转自:http://blog.sina.com.cn/s/blog_4a0a8b5d01015b0n.html) OpenSSH很老了,所以... 最开始只是因为openSSH启动不了,才用的Mob ...
- 【Android】Intent解读
Intent 的作用 Intent 是一个将要执行的动作的抽象的描述,一般来说是作为参数来使用,由Intent来协助完成android各个组件之间的通讯. 比如说调用startActivity()来启 ...
- 【驱动】DM9000网卡驱动分析
Preface 内核源码版本:linux-2.6.18 网卡驱动·linux内核网络分层结构:http://infohacker.blog.51cto.com/6751239/122114 ...
- 安装Python2.7出现configure: error: no acceptable C compiler found in $PATH错误
安装Python2.7出现configure: error: no acceptable C compiler found in $PATH错误 安装步骤: 安装依赖 yum groupinstall ...