1.static_case强制类型转换
> 用于基本类型间的转换,但不能用于基本类型指针间的转换
> 用于有继承关系类对象之间的转换和类指针之间的转换
如:
int main()
{
int i = 0;
char c = 'c';
int * pi = &i;
char* pc = &c;
c = static_cast<char>(i); //可以正常转换
pc = static_cast<char *>(pi); //不能正常转换,编译会报错
return 0;
}
2.reinterpret_cast强制类型转换
> 用于指针类型间的类型转换
> 用于整数和指针类型间的强制转换
如:
typedef void(PF)(int);
int main()
{
int i = 0;
char c = 'c';
int *pi = reinterpret_cast<int *>(&c); //可以成功转换
char *pc = reinterpret_cast<char *>(&i); //可以成功转换
PF* pf = reinterpret_cast<PF*>(0x12345678); //可以成功转换
c = reinterpret_cast<char>(i); //转换失败,编译不通过
return 0;
}
reinterpret_cast直接从二进制位进行复制,是一种极其危险的强制转换。
3.dynamic_cast强制类型转换
> 主要用于类层次间的转换,还可以用于类之间的交叉转换
> 具有类型检查的功能,比static_cast更安全
4.const_cast强制类型转换
> 用于去除变量的const属性
如:
int main()
{
const int& j = 1;
int& k = const_cast<int&>(j); //可以赋值
const int x = 2;
int& y = const_cast<int&>(x); //可以赋值
k = 5;
printf(" j = %d\n",j);
printf(" k = %d\n",k);
y = 3;
printf(" x = %d\n",x);
printf(" y = %d\n",y);
printf(" &x = %p\n",&x);
printf(" &y = %p\n",&y);
return 0;
}
运行结果为: