C++四种转换

Static_const类似于C语言的强制转换操作符(),不进行运行时安全检查,多用于非多态类型之间相互转换,如int到double等,也可用于基类与派生类之间的相互转换,从派生类指针转为基类指针时是安全的,反之由于不存在安全检查,可能会出现安全问题;如果不同类(也不是派生类与基类关系)转换,会出现编译错误;

Dynamic_cast用于基类和派生类(只能用于指针和引用,且须包含虚函数)之间的转换,会进行安全检查,如果转换指针失败返回0(null),引用转换失败抛回bad_cast(static_cast会成功得到一个指向基类对象的派生类指针,操作出错的危险),此外,被转换的对象(指针)需要有虚函数(因为类型信息存储在虚函数中),否则会出错;如果是不同类型之间进行转换,指针得到的结果也是null,引用返回bad_cast;

Reinterpret_cast没有实际逻辑意义,只对相应存储空间中的数据的含义做另一重解释,如int *n= new int;double *d=reinterpret_cast<double*> (n);结果只是使得d指向n所指空间,将之用double的方式解释;

Const_cast用以去除对象的const或者volatile属性,如常量指针/引用转换为非常量指针/引用,但是依旧指向原来的对象,常常用在需要非常量参数的函数中,转换后,可通过指针/引用对所指对象进行修改;int a=3; const int * b = & a; int * c = const_cast<int * >(b); * c = 4; cout<<a<<*c;这时输出两个4,如果不使用const_cast转换符则常量指针*c的值是不能改变的


关于C++四种转换,可参见博文:http://blog.csdn.net/meimeng515/article/details/6902063 和 http://liuxiaowei199001.blog.163.com/blog/static/1938053252011824101529159/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值