C++中强制类型转换有四种:
1.static_cast
格式:static_cast<Type>(Value);
--用于基本类型间的转换,但不能用于基本类型指针间的转换;
int i = 0; char c = 'C';
int *pi = &i;
char *pc = &c; c = static_cast<char>(i); //没问题,将i转换为char型
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(直接从二进制位进行复制,不安全的转换)
--用于指针类型间的强制转换;
--用于整数和指针类型间的强制转换;