C++四种强制类型转换介绍( 二 )

运行结果为:

C++四种强制类型转换介绍

文章插图
 
可以看出,px 和 py 指向同一个地址,但通过 py 就可以修改 x 的值了 。
这是因为通过const_cast,就把 const 类型的指针 px 转换成非 const 类型的指针 py 了 。
4、reinterpret_cast
reinterpret_cast<type>(expression)
该运算符可以把一个指针转换成一个整数,也可以把一个整数转换成一个指针 。
int main(){int* p = new int(5);uint64_t p_val = reinterpret_cast<uint64_t>(p);cout << "p:" << p << endl;cout << "p_val:" << hex << p_val << endl;return 0;}上述代码把指针 p 的地址值转换成了 uint64_t 类型的整数值,运行结果为:
C++四种强制类型转换介绍

文章插图
 
这个转换是“最不安全”的 。不推荐使用 。
综上,在使用强制类型转换时,需要首先考虑清楚使用目的,总结如下:
  • static_cast:基本类型转换,低风险;
  • dynamic_cast:类层次间的上行转换或下行转换,低风险;
  • const_cast:去 const 属性,低风险;
  • reinterpret_cast:转换不相关的类型,高风险 。




推荐阅读