C++11 四种类型转换

const_cast:将const转换为非const

	const int n = 0;
	int* p = const_cast<int*>(&n);

static_cast :只能用于良性转换。如:

  • 整型间的转换
  • void*和其他指针的转换

不能用于:

  • 不能将整型转换为指针类型
  • 不能再两个具体类型的指针之间进行转换

另外,static_cast再编译期间进行转换,转换失败的话就会抛出一个编译错误

#include <iostream>
#include <cstdlib>

int main() {
  //下面是正确的用法
  int m = 100;
  long n = static_cast<long>(m);  //宽转换,没有信息丢失
  char ch = static_cast<char>(m);  //窄转换,可能会丢失信息
  int* p1 = static_cast<int*>(malloc(10 * sizeof(int)));  //将void指针转换为具体类型指针
  void* p2 = static_cast<void*>(p1);  //将具体类型指针,转换为void指针

  //下面的用法是错误的
  float* p3 = static_cast<float*>(p1);  //不能在两个具体类型的指针之间进行转换
  p3 = static_cast<float*>(0X2DF9);  //不能将整数转换为指针类型
  return 0;
}

 reinterpret_cast:只是对二进制位进行重新解释,不会借助已有的转换规则对数据进行调整。reinterpret_cast 可以认为是 static_cast 的一种补充,一些 static_cast 不能完成的转换,就可以用 reinterpret_cast 来完成,例如两个具体类型指针之间的转换、int 和指针之间的转换(有些编译器只允许 int 转指针,不允许反过来)。

dynamic_cast: 用于在类的继承层次之间进行类型转换,它既允许向上转型也允许向下转型向上转型是无条件的,不会进行任何检测,所以都能成功;向下转型的前提必须是安全的,要借助 RTTI 进行检测,所有只有一部分能成功。
dynamic_cast 与 static_cast 是相对的,dynamic_cast 是“动态转换”的意思,static_cast 是“静态转换”的意思。dynamic_cast 会在程序运行期间借助 RTTI 进行类型转换,这就要求基类必须包含虚函数;static_cast 在编译期间完成类型转换,能够更加及时地发现错误。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值