const_cast,字面上理解就是去const属性。
static_cast,命名上理解是静态类型转换。如int转换成char。
dynamic_cast,命名上理解是动态类型转换。如子类和父类之间的多态类型转换。
reinterpret_cast,仅仅重新解释类型,但没有进行二进制的转换。
static_cast数值类型之间,有一方是void*的指针类型之间
const_cast用于临时去掉const、volatile限制
reinterpret_cast任意两种指针类型之间,指针于数值类型之间
reinterpret_cast:仅仅重新解释类型,但没有进行二进制的转换:
#include
using namespace std;
#include
int main()
{
int n = static_cast
(45.67);
int* p = static_cast(calloc(sizeof(int),10));
free(p);
const int k = n;
cout << "k=" << k << endl;
const_cast(k) = 789;
cout << "k=" << k << endl;
float f=123.45;
p = reinterpret_cast(&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。