c++类型转换相关
ps:任何基本类型的变量之间都可以隐式类型转换
任何其他类型的指针到 void * 都可以隐式转换
void * 到任何其他类型的指针需要显式类型转换
任何类型非常指针到同类型常指针 都可以隐式转换
任何类型常指针到同类型的非常指针都必须强转
除了 void * 以外,其他类型指针之间都需要强转
显式类型转换(强转)
- c 风格的显式类型转换
- (目标类型)源类型变量
- c++风格的显式类型转换
- 目标类型(源类型变量)
ps:c++标准不建议以上两种转换方式,因为意味着编译器不会做任何类型检查。
- 静态类型转换
- ststic_cast<目标类型>(源类型变量)
- 隐式转换的逆转换
int a = 10;
void* pv = &a;
int* pa = static_cast<int*> pv; // void* -> int* 的反向 int* -> void*(隐式转换),所以 void* -> int* 可以用静态类型转换
###################################################
int a = 10;
const int* pv = &a;
int* pa = static_cast<int*> pv; // const int* --> int* 的反方向 int*--> const int*(隐式转换),理论上可以用静态类型转换,但是编译器会报错,因为 c++提供了去常属性的转换方式(常类型转换),所以禁止了这种转换方式
###################################################
- 常类型转换
- const_cast<目标类型>(源类型变量)
int a = 10;
const int* pv = &a;
int* pa = const_cast<int*> pv;
- 重解释类型转换
- reinterpret_cast<目标类型>(源类型)
- 任意类型的指针之间的转换或引用之间的转换
- 任意类型的指针和整型之间的转换
int a = 10;
int* c = &a;
double* f = reinterpret_cast<double*>(c);
- 动态类型转换(后续补充!!!)
- 自定义类型转换(后续补充!!!)