C++ 类型转换

C++的四种类型转换:
Alt

1 static_cast

用于内置的数据类型,还具有继承关系的指针或引用。

【注意】:若是内置数据类型指针,如int*、char*,或者没有继承关系的对象指针,都不能用static_cast

Alt

//转换具有继承关系的对象指针
//父类指针转换成子类指针(不安全)
Animal *ani=nullptr;
Cat *cat=static_cast<Cat*>(ani); 
//子类指针转成父类指针
Cat *soncat=nullptr;
Animal *anifather=static_cast<Animal *>(soncat); 

//引用类似
Animal aniobj;
Animal &aniref=aniohj;
Cat &cat=static_cast<Cat&>(aniref);

Cat catobj;
Cat &catref=catobj;
Animal &anifather=static_cast<Animal&>(catref);

Alt

2 dynamic_cast

用于转换具有继承关系的指针或引用,在转换前会进行对象类型安全检查。

注意:dynamic_cast的对象一定是类的指针、引用或者void*。

Alt
【注意】:dynamic_cast只能转换具有继承关系的指针或引用,并且只能由子类型转换成基类型

3 const_cast

指针、引用或对象指针,只能增加或去除变量的const性。

1)常量指针被转化为非常量的指针,并且仍然指向原来的对象;
2)常量引用被转换成非常量的引用,并且仍然指向原来的对象。
Alt
Alt

4 reinterpret_cast

强制类型转换,无关的指针类型,包括函数的指针都可以进行转换。

Alt


有些隐式类型转换存在危险:
涉及负值的运算,请注意,负值的转换。
Alt

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值