c++中的各种类型转换

来源:互联网 发布:为什么要学c语言 编辑:程序博客网 时间:2024/06/05 18:53

const_cast
去掉const属性

const int base = 1;//int *b = &base ; //编译错误int *b = const_cast<int *>(&base) ; 

dynamic_cast
只能用于指针和引用的转换,
可以将父类指针转换成对应的子类指针,但是在向下转换的时候父类一定要有虚函数,否则会编译错误,
如果是转换失败,指针的转换会返回null,引用的转换会抛出异常。

class base {public:    base();    virtual ~base();//父类需要有虚函数};class derive : public base {public:};void dynamic_cast_test(){    base *a = new base ;    derive *b = dynamic_cast<derive *>(a);//如果转换失败返回NULL}  

static_cast
可以实现基本类型之间的相互转换,
可以实现空类型指针到其他类型指针的转换,
可以实现子类和父类之间的互相转换,
可以实现任何类型转换成void类型。

reinterpret_cast
可以实现不相关类型的转换,简单的实现二进制的拷贝,并不作任何类型检查,
所以类似于int转向double的情况,就会出问题,因为只是简单的将4个字节的二进制转换给double,而并不满足double的二进制保存方式,
在自己的编译器测试,编译不通过

 int aa = 1; int *a = &aa; double *b = reinterpret_cast<double *>(a) ;//这样得到的结果并不是1,而是将整数型的二进制使用浮点型格式解释
原创粉丝点击