<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
- <C++> dynamic_cast、const_cast、static_cast、reinterpret_cast总结
- reinterpret_cast,const_cast,static_cast,dynamic_cast 总结
- reinterpret_cast,const_cast,static_cast,dynamic_cast 总结
- reinterpret_cast,const_cast,static_cast,dynamic_cast 总结
- reinterpret_cast,const_cast,static_cast,dynamic_cast 总结
- reinterpret_cast,const_cast,static_cast,dynamic_cast 总结
- static_cast、dynamic_cast、const_cast、reinterpret_cast总结
- dynamic_cast、const_cast、static_cast、reinterpret_cast
- static_cast, dynamic_cast, const_cast, reinterpret_cast
- const_cast,reinterpret_cast,static_cast,dynamic_cast
- const_cast、static_cast、reinterpret_cast、dynamic_cast
- static_cast,const_cast,dynamic_cast,reinterpret_cast
- dynamic_cast;const_cast;static_cast;reinterpret_cast;
- dynamic_cast 、reinterpret_cast 、 static_cast 、 const_cast
- dynamic_cast,const_cast,static_cast,reinterpret_cast
- static_cast,dynamic_cast,reinterpret_cast,const_cast
- static_cast, dynamic_cast, reinterpret_cast, const_cast
- static_cast、const_cast、reinterpret_cast、dynamic_cast
- 疯狂Spring Cloud连载(4)第一个Eureka程序
- 【动态规划】[luoguP1209 USACO1.3]修理牛棚 Barn Repair
- 疯狂Spring Cloud连载(5)Eureka集群搭建
- 疯狂Spring Cloud连载(6)Ribbon介绍
- 百度咋做长文本去重
- <C++> dynamic_cast、const_cast、static_cast、reinterpret_cast总结
- 疯狂Spring Cloud连载(7)Ribbon负载均衡器
- SSL2507 2015年NOIP提高组试题 跳石头(二分)
- Xcode9学习笔记23
- 数据库设计原则
- Java参数在方法中的传递
- 【第07章】【EventLoop和线程模型】
- 疯狂Spring Cloud连载(8)Spring Cloud与Ribbon
- 疯狂Spring Cloud连载(9)RestTemplate的负载均衡原理