TOP

c++强制类型转换
2014-11-17 11:20:23 】 浏览:227
Tags:强制 类型 转换

  dynamic_cast: 通常在基类和派生类之间转换时使用,run-time cast


  const_cast: 主要针对const和volatile的转换.


  static_cast: 一般的转换,no run-time check.通常,如果你不知道该用哪个,就用这个。


  reinterpret_cast: 用于进行没有任何关联之间的转换,比如一个字符指针转换为一个整形数。


  1)static_cast (a)[/b]


  编译器在编译期处理


  将地址a转换成类型T,T和a必须是指针、引用、算术类型或枚举类型。


  表达式static_cast (a), a的值转换为模板中指定的类型T。在运行时转换过程中,不进行类型检查来确保转换的安全性。


  static_cast它能在内置的数据类型间互相转换,对于类只能在有联系的指针类型间进行转换。可以在继承体系中把指针转换来、转换去,但是不能转换成继承体系外的一种类型


  class A { ... };


  class B { ... };


  class D : public B { ... };


  void f(B* pb, D* pd)


  {


  D* pd2 = static_cast (pb); // 不安全, pb可能只是B的指针


  B* pb2 = static_cast (pd); // 安全的


  A* pa2 = static_cast (pb); //错误A与B没有继承关系


  ...


  }


  2)dynamic_cast (a)[/b]


  在运行期,会检查这个转换是否可能。


  完成类层次结构中的提升。T必须是一个指针、引用或无类型的指针。a必须是决定一个指针或引用的表达式。


  dynamic_cast 仅能应用于指针或者引用,不支持内置数据类型


  表达式dynamic_cast (a) 将a值转换为类型为T的对象指针。如果类型T不是a的某个基类型,该操作将返回一个空指针。


  它不仅仅像static_cast那样,检查转换前后的两个指针是否属于同一个继承树,它还要检查被指针引用的对象的实际类型,确定转换是否可行。


  如果可以,它返回一个新指针,甚至计算出为处理多继承的需要的必要的偏移量。如果这两个指针间不能转换,转换就会失败,此时返回空指针(NULL)。


  很明显,为了让dynamic_cast能正常工作,必须让编译器支持运行期类型信息(RTTI)。



c++强制类型转换 https://www.cppentry.com/bencandy.php?fid=80&id=12752

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇C语言实例:小明买书 下一篇C++typeidtypename使用