C++类型转换:const_cast,static_cast,reinterpret_cast和dynamic_cast

来源:互联网 发布:人工智能门户 编辑:程序博客网 时间:2024/05/16 05:58

(1) const_cast

用法:const_cast<tyoe_id>(expression_r_r)

作用:用来修改类型的const或volatile属性。

转换:a.常量指针被转化成非常量指针,并且仍然指向原来的对象;

     b.常量引用被转换成非常量引用,并且仍然指向原来的对象;

     c.常量对象被转换成非常量对象。

(2) satic_cast

用法:static_cast < type-id > ( expression_r_r )

该运算符把expression_r_r转换为type-id类型,但没有运行时类型检查来保证转换的安全性。

转换:a.类层次结构中基类和子类之间指针或引用的转换;

             b.基本数据类型之间的转换,如把int转换成char,把int转换成enum;(这种转换的安全性也要开发人员来保证)
             c.空指针转换成目标类型的空指针;
             d.任何类型的表达式转换成void类型。
注:static_cast不能转换掉expression_r_r的const、volitale、或者__unaligned属性。

(3) reinterpret_cast

用法:reinpreter_cast<type-id> (expression_r_r)

转换:指针和整数之间的互换。

注:type-id必须是一个指针、引用、算术类型、函数指针或者成员指针。

(4) dynamic_cast

用法:dynamic_cast < type-id > ( expression_r_r )

转换:a.类层次间的上行转换和下行转换;

     b.类之间的交叉转换。

注:Type-id必须是类的指针、类的引用或者void *。

总结:

   const_cast:   主要用于const和volatile的转换;
   static_cast:   一般的转换,普遍适用;  
   reinterpret_cast:  进行没有任何关联之间的转换,比如一个字符指针转换为一个整形数;

   dynamic_cast:   常用于基类和派生类之间转换。



0 0
原创粉丝点击