<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的一个基本功能:
reinterpret_cast:
没有关注,知道他比较厉害,可以类型转指针、指针转类型。
意外收获
enum class 是c++ 11的新特性。之前enum可以随便转成int,这回编译器会自己对其进行类型检查。
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++的类型转换符:static_cast、dynamic_cast、reinterpret_cast、和const_cast
- c++学习-static_cast、dynamic_cast、const_cast和reinterpret_cast总结
- C++类型转换运算符: static_cast<>,reinterpret_cast<>,dynamic_cast<>, const_cast<>
- c++中的类型转换(dynamic_cast, reinterpret_cast, static_cast ,const_cast)
- C++四种强制转换 static_cast , dynamic_cast , const_cast , reinterpret_cast
- C++中的强制类型转换(cast)——static_cast, dynamic_cast, const_cast和reinterpret_cast
- C++的类型转换符:static_cast、dynamic_cast、reinterpret_cast和const_cast
- C++中四种类型转换static_cast、const_cast、reinterpret_cast、dynamic_cast
- C++中的static_cast,dynamic_cast,const_cast,reinterpret_cast
- 标准C++的类型转换符:static_cast、dynamic_cast、reinterpret_cast和const_cast(转)
- 关于c++ 强制转换类型运算符 static_cast、dynamic_cast、reinterpret_和const_cast
- 标准C++的类型转换符:static_cast、dynamic_cast、reinterpret_cast和const_cast
- 标准C++的类型转换符:static_cast、dynamic_cast、reinterpret_cast和const_cast
- 标准C++的类型转换符:static_cast、dynamic_cast、reinterpret_cast和const_cast
- [zz]c++强制类型转换:dynamic_cast、const_cast 、static_cast、reinterpret_cast
- 使用标准C++的类型转换符:static_cast、dynamic_cast、reinterpret_cast、和const_cast
- 标准C++的类型转换符:static_cast、dynamic_cast、reinterpret_cast和const_cast
- 标准C++的类型转换符:static_cast、dynamic_cast、reinterpret_cast和const_cast(转载)
- C++的类型转换:static_cast、dynamic_cast、reinterpret_cast和const_cast
- 标准C++的类型转换:static_cast、dynamic_cast、reinterpret_cast、和const_cast