C++中强制变换之const_cast
来源:互联网 发布:mysql定时任务 编辑:程序博客网 时间:2024/05/17 23:02
今天学习了一下C++中的强制转换,看了const_cast,我发现了这个转换关键字的奇怪之处,于是把它记录一下,废话不说,先看一个程序:
1 #include <iostream> 2 3 using namespace std; 4 5 int main() 6 { 7 const int val = 5; 8 int test =5; 9 //int *pval = &val; //err: cannot convert from 'const int * to int *'10 int *pval = const_cast<int *>(&val);11 cout << "Before:" << endl;12 cout << " val:" << val << endl;13 cout << "*pval:" << *pval << endl;14 *pval = 10;15 cout << "After:" << endl;16 cout << " val:" << val << endl;17 cout << "*pval:" << *pval << endl;18 return 0;19 }
以上程序打印的结果:
一开始 *pval 和val的值都是5,因为他们指向同一地址。
但是后来我通过给(*pval)赋值,是的指针pval所指向的内存地址为10,然后打印去而发现val 还是等于 5 而*pval却等于10,这是很矛盾的啊,按理讲他们是内存中同一块地址中的内容,应该完全一样啊,我很不解,于是我看了一下内存:
以上图中的地址就是val的内存地址,但是通过上面的图可以看到,0012FF44地址处的值为 0000000A(16进制,4个字节) = 10 (十进制)。
也就是说内存中的内容确实被改变了,只是编译器在输出const int val时并不是读取内存地址内容!为了搞懂这个问题我又汇编了一下:
发现在输出val值得过程中,编译器直接将5赋值给val,而不是工内存中读取。这就解释了为什么指向内存中同一个地址,输出的值却不同!
0 0
- C++中强制变换之const_cast
- c++之强制转换之const_cast和reinterpret_cast
- 【C++】强制类型转换(static_cast,reinterpret_cast,const_cast,dynamic_cast,explicit)
- [C++] 强制类型转换static_cast、dynamic_cast、reinterpret_cast和const_cast
- c++dynamic_cast、const_cast 、static_cast、reinterpret_cast强制类型转换
- C/C++: C++ 中 const_cast 的含义
- 【C/C++学习】之三、const_cast
- 标准c++中主要有四种强制转换类型运算符 const_cast,reinterpret_cast,static_cast,dynamic_cast
- C++中比较全面的四种强制类型转化的比较static_cast const_cast reinterpret_cast dynamic_cast
- C++中4种强制类型转化。static_cast,const_cast,reinterpret_cast,dynamic_cast
- c 中强制转化详解
- [c/c++]关于const_cast
- 强制转换函数(const_cast,reinterpret_cast,static_cast,dynamic_cast)
- c++强制类型转换:dynamic_cast、const_cast 、static_cast
- C++ const_cast强制去掉常量属性
- 强制转换函数(const_cast,reinterpret_cast,static_cast,dynamic_cast)
- C++强制类型转换const_cast()注意事项
- C++强制类型转换操作符 const_cast
- 生成任意区间的随机数
- socket编程:客户端与服务器间的连接以及各函数的用法
- 我心所向之Android4.2 视频采集和显示模块序言
- 读前感
- Effective c++ 第一章 让自己习惯C++
- C++中强制变换之const_cast
- 学习C++所需看的书和顺序
- C++中自己理解的一些细节哈
- c++子类继承父类的覆盖问题
- 构造函数语义学之Default Constructor构建操作
- 构造函数语义学之Copy Constructor构建操作(1)
- 构造函数语义学之Copy Constructor构建操作(2)
- 构造函数语义学之程序转化语义学(1)
- 构造函数语义学之程序转化语义学(2)