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

来源:互联网 发布:js urldecode 在线 编辑:程序博客网 时间:2024/06/04 00:52

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
原创粉丝点击