运行结果为:

文章插图
可以看出,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 类型的整数值,运行结果为:
文章插图
这个转换是“最不安全”的 。不推荐使用 。
综上,在使用强制类型转换时,需要首先考虑清楚使用目的,总结如下:
- static_cast:基本类型转换,低风险;
- dynamic_cast:类层次间的上行转换或下行转换,低风险;
- const_cast:去 const 属性,低风险;
- reinterpret_cast:转换不相关的类型,高风险 。
推荐阅读
- 如果C++最强大,为什么它不及Java、Python流行?
- 如何做亲子鉴定?
- 春季如何缓解春困四种糖水可以
- 工人|年轻人,打死都不要碰这四种职业
- C++面向对象继承与多态
- C++11/14/17标准库测试代码
- C++的函数重载和函数重写
- 当你按下电源键后 电脑都做了什么?强制关机对电脑有害吗?
- C++中左值和右值的理解
- C 与 C++ 40 年的爱恨情仇
