浅析c++中的类型转换--const_cast
2015-10-14 23:06
447 查看
csdn(床上等你)博客的排名终于不是千里之外了,有了具体的数字。。。
今天就搞一个简单的介绍const_cast类型转换符。
作用就是:
从类中移除 const、volatile 和 __unaligned 特性。
语法如下:
const_cast < type-id > ( expression )
指向任何对象类型的指针或指向数据成员的指针可显式转换为完全相同的类型(const、volatile 和 __unaligned 限定符除外)。
对于指针和引用,结果将引用原始对象。
对于指向数据成员的指针,结果将引用与指向数据成员的原始(未强制转换)的指针相同的成员。 根据引用对象的类型,通过生成的指针、引用或指向数据成员的指针的写入操作可能产生未定义的行为。
您不能使用 const_cast 运算符直接重写常量变量的常量状态。
const_cast 运算符将 null 指针值转换为目标类型的 null 指针值。
上代码:
(一)常量指针被转化成非常量指针,转换后指针指向原来的变量(即转换后的指针地址不变)
(二)常量引用转为非常量引用。
(三)常量对象(或基本类型)不可以被转换成非常量对象(或基本类型)。
总结:
使用const_cast去掉const属性,其实并不是真的改变原类类型(或基本类型)的const属性,它只是又提供了一个接口(指针或引用),使你可以通过这个接口来改变类型的值。
今天就搞一个简单的介绍const_cast类型转换符。
作用就是:
从类中移除 const、volatile 和 __unaligned 特性。
语法如下:
const_cast < type-id > ( expression )
指向任何对象类型的指针或指向数据成员的指针可显式转换为完全相同的类型(const、volatile 和 __unaligned 限定符除外)。
对于指针和引用,结果将引用原始对象。
对于指向数据成员的指针,结果将引用与指向数据成员的原始(未强制转换)的指针相同的成员。 根据引用对象的类型,通过生成的指针、引用或指向数据成员的指针的写入操作可能产生未定义的行为。
您不能使用 const_cast 运算符直接重写常量变量的常量状态。
const_cast 运算符将 null 指针值转换为目标类型的 null 指针值。
上代码:
(一)常量指针被转化成非常量指针,转换后指针指向原来的变量(即转换后的指针地址不变)
(二)常量引用转为非常量引用。
(三)常量对象(或基本类型)不可以被转换成非常量对象(或基本类型)。
//代码一 class A { public: A() { m_iNum = 0; } public: int m_iNum; }; void foo() { //1. 指针指向类 const A *pca1 = new A; A *pa2 = const_cast<A*>(pca1); //常量对象转换为非常量对象 pa2->m_iNum = 200; //fine //转换后指针指向原来的对象 cout<< pca1->m_iNum <<pa2->m_iNum<<endl; //200 200 //2. 指针指向基本类型 const int ica = 100; int * ia = const_cast<int *>(&ica); *ia = 200; cout<< *ia <<ica<<endl; //200 100 }
//代码二 class A { public: A() { m_iNum = 1; } public: int m_iNum; }; void foo() { A a0; const A &a1 = a0; A a2 = const_cast<A&>(a1); //常量引用转为非常量引用 a2.m_iNum = 200; //fine cout<< a0.m_iNum << a1.m_iNum << a2.m_iNum << endl; //1 1 200 }
//代码三 void foo() { //常量对象被转换成非常量对象时出错 const A ca; A a = const_cast<A>(ca); //不允许 const int i = 100; int j = const_cast<int>(i); //不允许 }
总结:
使用const_cast去掉const属性,其实并不是真的改变原类类型(或基本类型)的const属性,它只是又提供了一个接口(指针或引用),使你可以通过这个接口来改变类型的值。
相关文章推荐
- 浅析c++中的类型转换--const_cast
- C++文件(夹)选择对话框
- 剑指offer第十一题【二进制中1的个数】c++实现
- 编写程序求解: 有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?打印出来?
- c++ primer第五版(中文)习题答案 第十章第四节第三小节-反向迭代器
- C语言:在屏幕上打印杨辉三角形
- 编这样一个程序,用户输入10个整数,程序找出其中的最大值和最小值
- 从标准输入读取几行输入。每行输入都要打印到标准输出上,前面加上行号,使能够处理的输入行的长度没有限制
- 编写猜数字游戏
- 【面试题】C语言:根据A,B,C,D四人没人说得一句话,四句话仅有三句话正确,判断嫌疑犯
- [C++] Memory_stack_heap
- .编写折半查找函数。
- C++与JAVA的异同
- 打印杨辉三角问题
- C语言:5位运动员每人说了两句话,均有一句话正确,预测比赛结果
- 日本谋杀案问题,警察通过排查确定杀人凶手必为4个嫌疑犯的一个,已知3个人说了真话,1个人说的是假话
- c++课程感想6
- 5位选手说两个猜测,都说对一半,预测比赛名次问题
- C++关键字的详解 ---- volatile关键字
- 项目38.1大奖赛计分(续一)