读书人

[C++][Casting] C++ 四种 cast应用

发布时间: 2012-11-09 10:18:47 作者: rapoo

[C++][Casting] C++ 四种 cast使用
http://www.cnblogs.com/yawer/archive/2007/11/27/973909.html

dynamic_cast—多态类型的转化
  表达式:dynamic_cast(expression)把操作数expression转化为一个type-id对象。type-id必须是一个指针或者是一个引用。如果type-id是一个指针,那么expression必须是一个指针。如果type-id是一个引用,那么expression是一个左值表达式。

static_cast非多态类型转化
  static_cast操作符将expression转化为type-id类型。没有运行时检查来确保这项转化是安全的转化。
  static_cast操作符可以用来将基类的指针转化为派生类的指针,这样的转化都不总是安全的。
  一般的,可以使用static_cast来将数字数据类型(enums)转化为ints,或者将ints转化为floats.你能够确保数据类型包含在转化之中。static_cast没有dynamic_cast安全。因为static_cast没有运行时检查。当遇到有歧义的指针时,dynamic_cast会失败,而static_cast将返回,好像没有任何错误一样。这是非常危险的。虽然dynamic_cast是安全的,但是它仅适用于指针和引用,并且运行时检查是一个负担。

 const_cast
  cosnt_cast用来移除const,volatile和_unaligned属性。
  const_cast操作符能够用来移除类中的const,volatile和_unaligned属性。
  一个任何对象类型的指针或者一个数据成员的指针能够显示的转化为相同的类型,除了const,volatile和_unaligned标识符。对于指针和引用,结果将引用原始的对象。对于数据成员指针,结果将指向原始数据指针所指向的数据成员。依靠引用对象的雷ixng,一个结果指针(引用、数据成员)的写操作将产生undefined行为。

  reinterpret_cast
  用来简单的重新解释bits.
  reinterpret_cast操作符允许任何指针转化为任何其他的指针类型。它允许任何整型类型转化为任何指针类型,反方向也一样。误用reinterpret_cast操作符是不安全的。除非需要的转化是固有的低级别的。
  reinterpret_cast操作符用来将char * 转化为int *或者One_class*转化为Unrelated_class*,这样是内在的不安全的。
  reinterpret_cast的结果不能够安全的使用除了转化为它的原始类型。其它的使用都是不可移植的。
  reinterpret_cast操作符不能够去除const,volatile或者__unaligned属性,可以用const_cast来去除。
  reinterpret_cast操作符将null指针转化为null指针。

读书人网 >C++

热点推荐