C++中强制类型转换有四种:
1.static_cast
格式:static_cast(Value);
–用于基本类型间的转换,但不能用于基本类型指针间的转换;
int i = 0;
char c = 'C';<br>int *pi = &i;<br>char *pc = &c;
c = static_cast<char>(i); //没问题,将i转换为char型<br>pc = static_cast<char*>(pi); //不可以,不能用于指针间转换
–用于有继承关系类对象之间的转换和类指针之间的转换;
–static_cast是编译期进行转换的,无法在运行时检测类型,所以类类型之间的转换可能存在风险;
2.const_cast
–用于去除变量的const属性;
const int& j = 1;
int& k = const_cast<int&>(j); //将只读变量j去除const属性
k = 5;
const int x = 2;
int& y = const_cast<int&>(x);
y = 3;
printf("x = %d",x); //打印出来为2,因为编译到上面时已经将x = 2的值送进符号表
printf("y = %d",y); //打印出来为3,此时x和y的地址相同
3.dynamic_cast
–主要用于类层次间的转换,还可以用于类之间的交叉转换;
–dynamic_cast具有类型检查的功能,比static_cast更安全;
4.reinterpret_cast(直接从二进制位进行复制,不安全的转换)
–用于指针类型间的强制转换;
–用于整数和指针类型间的强制转换;