C++类型转换详解

1、C语言的隐式转换和显式转换

double a=1.234; int b=(int)a; //强制转换

2、C++的类型转换运算符
1)static_cast(expr):
用于以下三种情况:
相关类型转换,例如整型、实型
子类转父类
void *与其他类型转换
//static_cast(expr) //相关类型转换 double b=1.23; int a=static_cast(b); char c=static_cast(b); //void *与其他类型转换(单向) int *pa=&a; void *p=pa; //void*是万能指针,可以接受任何指针的类型 ,编译器不会报错 int *p2=p; //这句是错误的,不能把void*类型的指针转为int*型指针 int *p2=(int)p; //这样才是对的 //使用static_cast就可以把void*型指针转换为int*型指针 int *pa2=static_cast(p); //static_cast:不允许指针之间类型转换 char *pc=&ch; int *pa3=static_cast(pc); //错误!!!

2)reinterpret_cast(expr)
可以实现无关类型之间的转换
char *pc=&ch; int *pa3=reinterpret_cast(pc); //相当于C语言,无关类型之间转换int a=3; float b=reinterpret_cast(a); //错误,这是相关类型的转换

3)const_cast(expr)
去除指针和引用的const属性(其他类型是允许const赋值给非const)
const int *p=&a; int *p2=p; //不可以把const指针转换为int* int *p3=const_cast(p); const int &la=a; int &la2=la; //不可以把引用转换为int* int &la3=const_cast(la);

【C++类型转换详解】4)dynamic_cast(expr)运行时类型识别与检查,用于父类子类之间的转换

    推荐阅读