现在的位置: 首页 > 综合 > 正文

dynamic_cast、const_cast、static_cast、reinterpret_cast

2013年12月01日 ⁄ 综合 ⁄ 共 1018字 ⁄ 字号 评论关闭
文章目录

dynamic_cast的注意事项

  dynamic_cast转换符只能用于指针或者引用。dynamic_cast转换符只能用
于含有虚函数的类。dynamic_cast转换操作符在执行类型转换时首先将检查能否成功转换,如果能成功转换则转换之,如果转换失败,如果是指针则反
回一个0值,如果是转换的是引用,则抛出一个bad_cast异常,所以在使用dynamic_cast转换之间应使用if语句对其转换成功与否进行测
试,比如pd=dynamic_cast<D*>(pb);
if(pd){…}else{…},或者这样测试if(dynamic_cast<D*>(pb)){…}else{…}。


const_cast操作符

  其表达式为const_cast<类型>(表达式),其中类型指要
把表达式转换为的目标类型。该操作符用于改变const和volatile,const_cast最常用的用途就是删除const属性,如果某个变量在大
多数时候是常量,而在某个时候又是需要修改的,这时就可以使用const_cast操作符了。const_cast操作符不能改变类型的其他方面,他只能
改变const或volatile,即const_cast不能把int改变为double,但可以把const
int改变为int。const_cast只能用于指针或引用。const_cast的用法举例比如:int a=3; const int
*b=&a; int* c; c=const_cast<int*>(b); *c=4;
cout<<a<<*c;这时输出两个4,如果不使用const_cast转换符则常量指针*c的值是不能改变的,在这里使用
const_cast操作符,通过指针b就能改变常量指针和变量a的值。


static_cast操作符

 
 该操作符用于非多态类型的转换,任何标准转换都可以使用他,即static_cast可以把int转换为double,但不能把两个不相关的类对象进行
转换,比如类A不能转换为一个不相关的类B类型。static_cast本质上是传统c语言强制转换的替代品。


reinterpret_cast
操作符

  该操作符用于将一种类型转换为另一种不同的类型,比如可以把一个整型转换为一个指针,或把一个指针转换为一个整型,因此使用该操作符
的危险性较高,一般不应使用该操作符。

 

static_cast   是在编译时进行类型转换
dynamic_cast   是在运行时进行类型转换

抱歉!评论已关闭.