c++标准转换运算符const_cast

c++标准转换运算符const_cast

ID:10820305

大小:23.57 KB

页数:6页

时间:2018-07-08

c++标准转换运算符const_cast_第1页
c++标准转换运算符const_cast_第2页
c++标准转换运算符const_cast_第3页
c++标准转换运算符const_cast_第4页
c++标准转换运算符const_cast_第5页
资源描述:

《c++标准转换运算符const_cast》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、C++标准转换运算符const_cast前面讲了C++继承并扩展C语言的传统类型转换方式,最后留下了一些关于指针和引用上的转换问题,没有做详细地讲述。C++相比于C是一门面向对象的语言,面向对象最大的特点之一就是具有“多态性(Polymorphism)”。要想很好的使用多态性,就免不了要使用指针和引用,也免不了会碰到转换的问题,所以在这一篇,就把导师讲的以及在网上反复查阅了解的知识总结一下。C++提供了四个转换运算符:·const_cast(expression)·static_cast(expression)·reinterpre

2、t_cast(expression)·dynamic_cast(expression)它们有着相同的结构,看起来像是模板方法。这些方法就是提供给开发者用来进行指针和引用的转换的。其实我很早就想写这篇内容的,自己不断地查看导师发来的资料,也在网上不停地看相关的知识,却一直迟迟不能完全理解C++转换运算符的用法,倒是看了那些资料后先写了一篇传统转换方面的内容。虽然从字面上很好理解它们大致是什么作用,但是真正像使用起来,却用不知道他们具体的用途,只会不断的被编译器提醒Error。所以如果出现理解不到位或错误的地方,还希望前人或来者能够指正

3、。在我看来这些标准运算符的作用就是对传统运算符的代替,以便做到统一。就像我们用std::endl来输出换行,而不是''。我会用代码来说明相应的传统转换可以如何这些标准运算符。当然,这这是大致的理解,在标准运算符上,编译器肯定有做更多的处理,特别是dynamic_cast是不能用传统转换方式来完全实现的。在这一篇文章里,我会先讲讲我对const_cast运算符的理解。const_cast (expression)const_cast转换符是用来移除变量的const或volatile限定符。对于后者,我不是太清楚,因为它涉及到了多线程的设计,而我在这方面没有什么了解。所以

4、我只来说const方面的内容。用const_cast来去除const限定对于const变量,我们不能修改它的值,这是这个限定符最直接的表现。但是我们就是想违背它的限定希望修改其内容怎么办呢?下边的代码显然是达不到目的的:constintconstant=10;intmodifier=constant;因为对modifier的修改并不会影响到constant,这暗示了一点:const_cast转换符也不该用在对象数据上,因为这样的转换得到的两个变量/对象并没有相关性。只有用指针或者引用,让变量指向同一个地址才是解决方案,可惜下边的代码在C++中也是编译不过的:constin

5、tconstant=21;int*modifier=&constant //Error:invalidconversionfrom'constint*'to'int*'(上边的代码在C中是可以编译的,最多会得到一个warning,所在在C中上一步就可以开始对constant里面的数据胡作非为了)把constant交给非const的引用也是不行的。constintconstant=21;int&modifier=constant;//Error:invalidinitializationofreferenceoftype'int&'fromexpressionoftype'

6、constint'于是const_cast就出来消灭const,以求引起程序世界的混乱。下边的代码就顺利编译功过了:constintconstant=21;constint*const_p=&constant;int*modifier=const_cast(const_p);*modifier=7;传统转换方式实现const_cast运算符我说过标:准转换运算符是可以用传统转换方式实现的。const_cast实现原因就在于C++对于指针的转换是任意的,它不会检查类型,任何指针之间都可以进行互相转换,因此const_cast就可以直接使用显示转换(int*)来代

7、替:constintconstant=21;constint*const_p=&constant;int*modifier=(int*)(const_p);或者我们还可以把他们合成一个语句,跳过中间变量,用constintconstant=21;int*modifier=(int*)(&constant);替代constintconstant=21;int*modifier=const_cast(&constant);为何要去除const限定从前面代码中已经看到,我们不能对constant进行修改,但是我们可以对m

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。