您的位置:首页 > 编程语言 > C语言/C++

C++中4种强制类型转化。static_cast,const_cast,reinterpret_cast,dynamic_cast

2016-04-04 15:24 302 查看
C++中4种显示强制类型转化。

一个命名的强制类型转换形式如下:cast_name<type>(expression);

cast_name强制类型转化的名字,是4种之一,type要将表达式转换成的类型,expression是将要被转换的表达式。

(1)static_cast:任何具有明确定义的类型转换,只要不包含底层const,都可以使用static_cast。比如:

int i,j;
double  d = static_cast<double>i/j;


另外,对于编译器无法自动执行的类型转换也非常有用。如:

double d;
void  *p = &d;
double *dp = static_cast<double*>(p);


(2)const_cast:强制去除常数性,更确切地说是将指向常数对象的指针的指针转变为一个指向非常数对象的指针。

如:

int  i = 3;
const  int * pc = &i;
*pc = 5;//这个是错误的,pc是一个指针常量,所指向对象的值不能改变
int * p =const_cast<int*>(pc);//去除pc 的const特性
*p = 5;//这个是可以的。


(3)reinterpret_cast:可用来改变指针类型,或将一个指针类型转变为整型以及将整型转变为指针类型。因为转换效果与具体代码实现息息相关,需谨慎地使用reinterpret_cast。使用reinterpret_cast是非常危险的,就尽量避免使用。

(4)dynamic_cast:用于继承层次中的类型转换。在类层次间进行上行转换时,dynamic_cast和static_cast的效果是一样的;区别就是static_cast的类型是基本类型,而dynamic_cast的类型是类类型。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: