c++类型转换相关

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);
  • 动态类型转换(后续补充!!!)
  • 自定义类型转换(后续补充!!!)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值