C++风格的四种类型转换

在C++中延用C风格的类型转换,即(type)(expression) ,依然合法,但是C++风格的类型在准确性上的可读性要更高

1. static_cast<type> expression

和一般C风格转换无异,但不能从表达式中去掉const属性

2.const_cast<type> expression

用于去掉表达式中的const属性(包括volatileness属性)

例:

const int a =5;
//int &  b = a;  //错误
int & b = const_cast<int&> (a); //正确


3. dynamic_cast<type>(expression)

被用于安全地沿着类的继承关系向下进行类型转换。这就是说,你能用dynamic_cast把指向基类的指针或引用转换成指向其派生类或其兄弟类的指针或引用,而且你能知道转换是否成功。失败的转换将返回空指针(当对指针进行类型转换时)或者抛出异常(当对引用进行类型转换时)

PS:基类必须含用虚函数/纯虚函数


class Base {
	virtual void f(){};
};

class Derived : public Base{

};
int main() {

	Base* pBase = new Derived;
	Derived* pDerived = dynamic_cast<Derived *> (pBase);//去掉基类的virtual 会有编绎错误

}	

4.reinterpret_cast<type>(expression)

最普通的用途就是在函数指针类型之间进行转换, 转换函数指针的代码是不可移植的(C++不保证所有的函数指针都被用一样的方法表示)

--参见《More Effective C++》


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值