您的位置:首页 > 编程语言 > C语言/C++

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

2017-11-01 07:25 260 查看
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,这回编译器会自己对其进行类型检查。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++
相关文章推荐