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)
- 危险的转换符,类型之间的直接转换,应该尽量避免使用。
c++四种类型转换操作符简要总结
时间: 2024-10-06 01:10:21