<C++> dynamic_cast、const_cast、static_cast、reinterpret_cast总结

C++中涉及到转换功能有这么几个关键词:dynamic_cast、const_cast、static_cast、reinterpret_cast,总是感觉到对它理解的不够深刻。

const_cast:
功能:将常引用(const T&)和常指针(const T*)转换成引用(T&)和指针(T*),或将引用(T&)和指针(T*)转换成常引用(const T&)和常指针(const T*)。
dynamic_cast:
功能:简而言之,就是将类指针转换成类指针。转换的范围是基类和派生类之间。两个类要在同一个继承树中。上转型(upcasting)一定是安全的,而下转型(downcasting)不一定安全。dynamic_cast就是为了控制这个不安全的因素,如果转换不成功回返回nullptr,成功就会返回相应类型的指针。
相关概念:upcasting downcasting 多态 虚函数 dynamic_cast。
static_cast:
使用它可以完成内置类型和自定义类型之间的转换。也可以完成内置类型和内置类型之间的转换。
对于上转型和下转型来说,因为它没有返回值,所以和dynamic_cast相比较它是不太安全的。
使用static_cast我们可以完成一个QVariant的一个基本功能:

   //union
    union U { int a; double b; }u;
    //void* 是个好东西啊 这段代码没有它不行
    void *x = &u;
    u.a = 9;
    double* double_b = static_cast<double*>(x);
    int* int_a = static_cast<int*>(x);
    cout << *double_b <<endl << *int_a <<endl;  

reinterpret_cast:
没有关注,知道他比较厉害,可以类型转指针、指针转类型。
意外收获
enum class 是c++ 11的新特性。之前enum可以随便转成int,这回编译器会自己对其进行类型检查。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值