C++的创始人认为C语言的类型转换太过松散,所以在C++中添加了4个类型转换运算符,使转换过程更规范:
• dynamic_cast;
用于在类层次结构中进行向上转换
dynamic_cast (expression)
• const_cast;/
只执行一种用途的转换,改变值为const或volatile,type-name和expression类型必须相同。
const_cast (expression)
• static_cast;
static_cast (expression)
仅当type-name可被隐式转换为expression所属的类型或expression可被隐式转换为type-name所属的类型时,上述转换才是合法的。假设High是Low的基类,而Pond是一个无关的类,则从High到Low的转换、从Low到High的转换都是合法的,而从Low到Pond的转换是不允许的。
• reinterpret_cast;
reinterpret_cast (expression)
该运算符用于天生危险的类型转换。它不允许删除const,但会执行其他令人生厌的操作。
使用实例:
struct dat {short a; short b;};
long value = 0xA224B118;
dat * pd = reinterpret_cast<dat *>(&value);
cout << hex << pd->a;
reinterpret_cast并不支持所有的类型转换。不能将指针转为更小的整形或浮点型。不能将函数指针转换为数据指针,反之亦然。