static_cast
- 对类的指针只能转换有继承关系的类。对普通的指针来说只能在
void*
和其他指针之间转换。它还可转换简单的类型,比如int
到char
等。不能提供数字到指针的转换。不能提供不同类型指针之间的转换比如int*
到char*
。
dynamic_cast
- 提供安全的转换如果两个指针不存在继承关系转换会失败返回空指针,如果你提供一个错误的指针那样会发生内存访问异常,因为它会去比较两个类型的虚函数表。虚函数表的指针一般放在对象指针最开始的四字节中,你去访问一个错误的地址这样肯定会发生异常。
reinterpret_cast
- 提供数字到指针间的转换比如
void*
到int
。提供不同类型指针的强制转换比如int*
到char*
。不提供int
到char
的转换。但是处理类指针转换的时候不能用它,它不会自动的调整指针。
const_cast
- 把一个
const
指针转为非const
,最好不要用这个转换。