命名的强制类型转换

强制类型转换的格式为:

cast-name<type>(expression);

static_cast
任何具有明确定义的类型转换,只要不包含底层const,都可以使用static_cast,例如:

 int i,j;
 double k=static_cast<double>(j)/i;

当需要把一个较大的算数类型转换成一个较小的算数类型时很有用,这意味着我们不在乎精度的损失
我们也可以用它来转换指针,但是要保证指针的值不变,不然会产生未定义的错误
例如:

void* p=&d;
double *dp=static_cast<double*>(p);

注意:static_cast不会改变原变量的类型

const_cast 专门用于改变对象的底层const
例如:

const int *p;
int* q=const_cast<int *>(p);  //由于对象本身是常量 所以不能用q向p写值
//注意const_cast只能用于改变const属性 不能用于改变类型
sring* q=const_cast<string*>(p) //报错

const_cast也不能改变变量的原始类型

reinterpret_cast 通常为运算对象的位模式提供较低层次上的重新解释,例如

int *p;
char *q=reinterpret_cast<char*>(p);
//q虽然显式的是char指针 单实际上是int指针
strng str(q); //会导致异常的运行行为

怎样检查变量类型

#include<typeinfo>
int a;
cout<<"a:"<<typeid(a).name()<<endl;

强制类型转换干扰了正常的类型检查,我们在写程序时,应该尽量避免使用强制类型转换

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值