C++中强制变换之const_cast
今天学习了一下C++中的强制转换,看了const_cast,我发现了这个转换关键字的奇怪之处,于是把它记录一下,废话不说,先看一个程序:
#include <iostream> using namespace std; int main()
{
const int val = ;
int test =;
//int *pval = &val; //err: cannot convert from 'const int * to int *'
int *pval = const_cast<int *>(&val);
cout << "Before:" << endl;
cout << " val:" << val << endl;
cout << "*pval:" << *pval << endl;
*pval = ;
cout << "After:" << endl;
cout << " val:" << val << endl;
cout << "*pval:" << *pval << endl;
return ;
}
以上程序打印的结果:

一开始 *pval 和val的值都是5,因为他们指向同一地址。

但是后来我通过给(*pval)赋值,是的指针pval所指向的内存地址为10,然后打印去而发现val 还是等于 5 而*pval却等于10,这是很矛盾的啊,按理讲他们是内存中同一块地址中的内容,应该完全一样啊,我很不解,于是我看了一下内存:

以上图中的地址就是val的内存地址,但是通过上面的图可以看到,0012FF44地址处的值为 0000000A(16进制,4个字节) = 10 (十进制)。
也就是说内存中的内容确实被改变了,只是编译器在输出const int val时并不是读取内存地址内容!为了搞懂这个问题我又汇编了一下:

发现在输出val值得过程中,编译器直接将5赋值给val,而不是工内存中读取。这就解释了为什么指向内存中同一个地址,输出的值却不同!
@GGD@2PJFU}}HNP.jpg)
C++中强制变换之const_cast的更多相关文章
- C语言中强制类型转换总结
C语言中强制类型转换总结 ● 字符型变量的值实质上是一个8位的整数值,因此取值范围一般是-128-127,char型变量也可以加修饰符unsigned,则unsigned char 型变量的取值范围 ...
- java中强制类型转换
在Java中强制类型转换分为基本数据类型和引用数据类型两种,这里我们讨论的后者,也就是引用数据类型的强制类型转换. 在Java中由于继承和向上转型,子类可以非常自然地转换成父类,但是父类转换成子类则需 ...
- 关于CSS3中transform变换的小坑
2017年6月30日15:05:46 今天在写一个demo的时候,发现CSS3中transform变换的一个特性. 首先,我先描述一下我发现的情况(问题再现): <div class=" ...
- win10中强制vs2015使用管理员启动
文章转自: win10中强制vs2015使用管理员启动 首先,和网上流传的版本一样,需要做这下面这两步: 1. 打开VS快捷方式的属性对话框. 2.勾选“用管理员身份运行” 现在,你双击V ...
- opengl中场景变换|2D与3D互转换(转)
opengl中场景变换|2D与3D互转换 我们生活在一个三维的世界——如果要观察一个物体,我们可以: 1.从不同的位置去观察它.(视图变换) 2.移动或者旋转它,当然了,如果它只是计算机里面的物体,我 ...
- c#中的里氏转换和Java中强制类型转换在多态中的应用
在c#中: 注意: 子类并没有继承父类的构造函数,而是会默认调用父类那个无参数的构造函数. 如果一个子类继承了一个父类,那么这个子类除了可以使用自己的成员外,还可以使用从父类那里继承过来的成员.但是父 ...
- FreeBSD 5.0中强制访问控制机制的使用与源代码分析【转】
本文主要讲述FreeBSD 5.0操作系统中新增的重要安全机制,即强制访问控制机制(MAC)的使用与源代码分析,主要包括强制访问控制框架及多级安全(MLS)策略两部分内容.这一部分讲述要将MAC框架与 ...
- 为什么阿里巴巴Java开发手册中强制要求整型包装类对象值用 equals 方法比较?
在阅读<阿里巴巴Java开发手册>时,发现有一条关于整型包装类对象之间值比较的规约,具体内容如下: 这条建议非常值得大家关注, 而且该问题在 Java 面试中十分常见. 还需要思考以下几个 ...
- Kubernetes中强制删除Pod、namespace
Kubernetes中强制删除Pod.namespace 解决方法 可使用kubectl中的强制删除命令 # 删除POD kubectl delete pod PODNAME --force --gr ...
随机推荐
- [Android 中级]Voip之CSipSimple类库的编绎
CSipSimple是什么?是一款基于pjsip的Android客户端,相信想要研究VOIP通讯的朋友一定不会陌生,这里我就把如何编译CSipSimple写下来. 首先从CSipSimple官方网站上 ...
- spring mvc DispatcherServlet详解之四---视图渲染过程
整个spring mvc的架构如下图所示: 现在来讲解DispatcherServletDispatcherServlet的最后一步:视图渲染.视图渲染的过程是在获取到ModelAndView后的过程 ...
- php 总结
1.安装完apache之后 2.有一个目录 htdocs 下面就是根目录了 3.测试一下,新建一个index.html 写入 it works .输入localhost 看是否显示 it works ...
- Google代码实验室
https://code.google.com/p/google-styleguide/
- ASP.NET 打包下载文件
使用的类库为:ICSharpCode.SharpZipLib.dll 一种是打包整个文件夹,另一种是打包指定的多个文件,大同小异: using ICSharpCode.SharpZipLib.Zip; ...
- Android Studio创建工程时一直卡在下载Gradle
一直提示这个进度条,查了不少资料,有的说FQ,有的说下载gradle后运行下bin里面的批处理,再在环境变量里Path中加入路径,我都试了,都不和... 按理说FQ了可以下载了吧,但是半天没下载完,一 ...
- mac 下安装安卓模拟器
mac下的安卓模拟器——bluestacks 下载:http://pan.baidu.com/s/1kVvZyYz 该安卓模拟器除了能网络下载apk,本地还能安装apk,但是与win版不同,安装不是那 ...
- sql语句中like的使用
先看一道题: 写出一条sql语句,找出表B中 字段Value中不全是字母 数字 下划线的数据 初看这道题,我们想到可以用like去进行模糊匹配,找出想要的结果.但是有一个地方需要注意:如果想在SQL ...
- ZBar Installer
ZBar Install.For windows:http://sourceforge.net/projects/zbar/files/zbar/0.10/zbar-0.10-setup.exe/do ...
- php+支付宝整合
CREATE TABLE IF NOT EXISTS `alipay_order` ( `id` ) unsigned NOT NULL auto_increment, `orderid` ) NOT ...