C++主题——转型

 C++主题——转型

C++ Style Cast的优势:
1.那么长,又那么怪,容易被发现出来;
2.错误容易被编译器找到,他们的功能比较明确。

四种转型操作的职能:

1.const_cast
        只允许添加或移除表达式或类型的const、volatile修饰符。它将告诉编译器,它所进行的操作仅仅是与const相关操作的添加或移除。当代码在以后改变的时候,它会在编译器跳出来报告问题,而C Style Cast仍然当成没事人似的继续工作。

2.static_cast
        用于相对可跨平台的转型操作,如类层次中,基类的指针或者引用,向下转型成为派生类的指针或引用。

3.reinterpret_cast
        从bit的角度来看待一个对象,从而允许将一个对象看作是另一个对象,如int 到double,int*到char*等。
        它不具备可移植性,因为将一个对象转换程另一个对象的操作并非只是让编译器对那块内存的解析方法不同,那是根据平台的特性而决定的。

4.dynamic_cast
        也是在集成体系下的转型,但是不同与static转型,它是对多态类型的向下转型操作,它所操作的类型,必须是含有虚函数的类型的指针
        它执行runtime的检查操作,来判定转型的正确性,所以它比较耗费资源,如果转型失败,那么将抛出一个异常,std::bad_cast,可以利用这个异常的性质进行“能力查询”。

注意:
        对于应用程序框架,常常有在子虚函数中调用父类虚函数的情况,这时不应该用转型操作符,因为这时,static_cast<base>(*this).virtual_function();它所调用的是base的虚函数,但是不是this本身,而是this的一个copy,这样不能达到子类调用父类的目的,这样做是可以的:base::virtual_function();
        应该尽量避免转型~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值