C++四种新的类型转换操作符详解

static_cats
1.可以实现C++中内置基本数据类型之间的转换,enum,struct,int,char,float等。
int a = static_cast(7.987);
2.static_cast在相互联系的类型中转换,不一定包含虚函数。例如基类和子类之间的转换:其中,子类转换成父类指针是安全的,父类转化成子类是不安全的。(基类与子类之间的转换建议用dynamic_cast)
3.唯一一个可以用于类对象(非指针)转换的运算符,但仍然必须是子类和基类之间。

const_cast
用于取出const属性,把const类型的指针变为非const类型的指针,如:const int * fun(int x,inty){} int *ptr=const_cast<int *>fun(2,3)(针对指针)

dynamic_cast
1.其它三种都是编译时候完成的,dynamic_cast是在运行时候处理,运行时候要检查类型。
2.不能用于内置数据类型的转换。
3.dynamic_cast如果转换成功,返回的是指向类的指针或引用。转换不成,则返回NULL。
4.使用dynamic_cast转换,基类中一定含有虚函数,否则编译不通过。原因为只有存在虚函数,说明该基类有基类指针或引用指向派生类的情况,此时转换才有意义。而这个信息存储在虚函数表中,只有定义了虚函数,才会有虚函数表。
5.在类之间的转换,由下往上装换的dynamic_cast和static_cast效果是一样的。在由上往下进行转换时候,dynamic_cast比static_cast更安全,dynamic_cast会进行类型检查。检查类型错误可以返回NULL。

reinterpret_cast
将一个指针类型转换为其它指针类型,新类型的指针可以和旧类型的指针毫不相关,但他们存在潜在风险,因此被很少使用。如int* 与之间的转换float*会导致数据不能被完整的读取。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值