语法:
static_cast<new type>(expression):用于有明确定义的类型转换,例如把一个较大的数赋给一个较小的类型,或者找回void *指针。
const_cast<new type>(expression) :用于去const的转化。
reinterpret_cast<new type>(expression):位层面重新解释类型,谨慎使用,很不安全!!
#include <iostream>
#include <string>
using namespace std;
int main()
{
//reinterpret_cast可以强制转化为任何类型(不能窄化转化),所以非常不安全,尽量不要使用,它通常用于位层面的重新解释如下所示
//将0X5A重新解释位字符的ASCII码
int name = 0x5A;// 0X5A为字符Z的ASCII编码
int *p1 = &name;
char *p2 = reinterpret_cast<char *>(p1);//将指向int的指针强制转化为指向char的指针
cout << "p1指向的地址为:" << p1 << endl;
cout << "p2指向的地址为:" << static_cast<void *>(p2) << endl;
cout << "p1指向的对象内容" << *p1 << endl;
cout << "p2指向的对象内容" << *p2 << endl;
//static_cast编译器经常进行的运算符间对象类型转换都是它的作用,下面演示利用static_cast找回void *指针
string s1 = "我保存在void *中";
string *str = &s1;
void *_str = str;
string *str2 = static_cast<string *>(_str);
cout << "强制转换后内容可打印:" << *str2 << endl;
return 0;
}
程序运行结果如下: