首页 > 代码库 > c++四种类型转换操作符简要总结

c++四种类型转换操作符简要总结

1.  static_cast<target>(expression)

  • 可用于存在继承关系的类指针/引用之间的向上向下转换。执行向下转换时没有安全检查(区别于dynamic_cast),所以如果实际类型与目标类型不符合,编译虽然可以通过,但运行时的后果未定义。
  • void*指针转换为实际的指针
  • 其他基本类型的隐式转换以及反方向的转换,如:int <-> double

2.  dynamic_cast<target>(expression)

  • 只能用于target为类指针或者引用,或者void*的情形
  • 可以用来在基类和派生类之间的向上或者向下转换。(注:向下转换时,基类必须含有虚函数,因为dynamic_cast需要查询RTTI,而RTTI存放于虚函数表中)
  • 不能用在钻石型结构的非虚多重继承的跃级转换(因为非虚继承的越级转换是有歧义的)
  • 目标类型是指针时,如果转换失败,则返回空指针;目标类型为引用时,失败时抛出bad_cast异常

3. const_cast<target>(expression)

  • 可以用于去掉或者加上const或者volatile属性
  • 最常见的使用方式是,调用某些要求非const参数的函数,而该函数实际上并不修改该参数,则可以使用该操作符为该参数去掉const。若使用该操作符将const对象的const属性去掉并加以修改,则会导致不可预见的错误。
  • 只有该操作符可以去掉const属性,即使reinterpret_cast也不行

4. reinterpret_cast<target>(expression)

  • 危险的转换符,类型之间的直接转换,应该尽量避免使用。