C++中四种类型转换


1.static_cast
static_cast基本上拥有与C旧式转换相同的威力与意义,以及相同的限制,它是与C-style最接近的一个转换;
使用情况概述:通常是数值数据类型转换(比如float->int);不执行运行时类型检查(安全性不如dynamic_cast);能用于多态向上转换,向下则不一定能保证真确;
补充:任何编写程序时能够明确的类型转换都可以使用static_cast(static_cast不能转换掉底层const,volatile和__unaligned属性)。由于不提供运行时的检查,所以叫static_cast,因此,需要在编写程序时确认转换的安全性。

2.const_cast
const_cast用于改变表达式中的常量性(const)或易变性(volatile),以及__unaligned属性。
使用情况概述:最常用的是将const转换为非const;当然它其实还能去掉volatile性质、改变__unaligned的心性质;
疑问:旧式的C转换如何做到const_cast同样效果呢?

3.dynamic_cast
dynamic_cast用于多态的安全向下转型以及向上转型。
使用情况概述:用于多态类型向上/向下转型;会执行运行时检查;

4.reinterpret_cast
reinterpret_cast就是bit的简单重新解释,几乎什么都可以转。
使用情况概述:尽量少使用