C++类型转换之reinterpret_cast
C++是兼容C的,因此C语言中的强制类型转换在C++中同样适用,具体使用方法可以参照下面的代码示例:
float valueA = 3.0f;
int valueB = (int) valueA;
可以看到,C语言中强制类型转换的一般格式为:
(类型说明符)表达式
实现的功能就是把表达式的值强制转换为类型说明符表示的类型。除了这种强制类型转换方法外,C++还提供了四种类型转换方法,分别为
- static_cast<类型说明符>(表达式)
- dynamic_cast<类型说明符>(表达式)
- const_cast<类型说明符>(表达式)
- reinterpret_cast<类型说明符>(表达式)
下面在比较它们的异同时,按照适用范围从窄到宽的顺序介绍,先从使用频率比较低的reinterpret_cast开始,然后依次是const_cast,dynamic_cast,最后介绍static_cast。
reinterpret_cast
首先从英文字面的意思理解,interpret是“解释,诠释”的意思,加上前缀“re”,就是“重新诠释”的意思;cast在这里可以翻译成“转型”(在侯捷大大翻译的《深度探索C++对象模型》、《Effective C++(第三版)》中,cast都被翻译成了转型),这样整个词顺下来就是“重新诠释的转型”。我们知道变量在内存中是以“…0101…”二进制格式存储的,一个int型变量一般占用32个位(bit),参考下面的代码
#include <iostream>
using namespace std;
int main(int argc, char** argv)
int num = 0x00636261;//用16进制表示32位int,0x61是字符'a'的ASCII码
int * pnum = #
char * pstr = reinterpret_cast<char *>(pnum);
cout<<"pnum指针的值: "<<pnum<<endl;