C++风格的类型转换提供了4种类型转换操作符来应对不同场合的应用。
const_cast,字面上理解就是去const属性。
static_cast,命名上理解是静态类型转换。如int转换成char。dynamic_cast,命名上理解是动态类型转换。如子类和父类之间的多态类型转换。
reinterpret_cast,仅仅重新解释类型,但没有进行二进制的转换。
static_cast数值类型之间,有一方是void*的指针类型之间
const_cast用于临时去掉const、volatile限制
reinterpret_cast任意两种指针类型之间,指针于数值类型之间
reinterpret_cast:仅仅重新解释类型,但没有进行二进制的转换:
#include <iostream>
using namespace std;
#include <cstdlib>
int main()
{
int n = static_cast<int>(45.67);
int* p = static_cast<int*>(calloc(sizeof(int),10));
free(p);
const int k = n;
cout << "k=" << k << endl;
const_cast<int&>(k) = 789;
cout << "k=" << k << endl;
float f=123.45;
p = reinterpret_cast<int*>(&f);
cout << *p << endl;
n = int(12.34);
cout << "n=" << n << endl;
n = int();
cout << "n=" << n << endl;
int m(100);
cout << "m=" << m << endl;
int x();//函数声明
int(y)=200;//尽量不用,容易跟强制类型转换混淆
cout << "y=" << y << endl;
}
去const属性用const_cast。
基本类型转换用static_cast。
多态类之间的类型转换用daynamic_cast。
不同类型的指针类型转换用reinterpret_cast。