3.类型转换
Posted 干锅土鸡
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了3.类型转换相关的知识,希望对你有一定的参考价值。
- static_cast
static_cast:静态转换,理解成“正常转换”,编译时就会进行类型转换的检查。c风格的强制类型转换、编译器能够进行的隐士类型转换,都可以用static_cast显示完成。
//1.整型和实型之间转换
double f = 100.34f;
int i = static_cast<int>(f);
//2.子类转成父类(继承关系)
class A;
class B : public A;
B b;
A a;
A a = static_cast<A>(b);//子类转成父类对象,反过来不行
//3.void*与其他类型之间指针之间的转换,void*:无类型指针:可以指向任何指针类型(万能指针)
int i = 10;
int* p = &i;
void* q = static_cast<void*>(p);
//不可用情况:不能指针类型之间转换,如int*转double等
-
dynamic_cast:运行时类型识别和检查
主要用于父类型和子类型之间转换(父类型指针指向子类型对象,然后用dynamic_cast把父指针类型往子指针类型转) -
const_cast:去除指针或者引用的const属性,该转换能够将const性质去除掉。
编译时就会进行类型转换。
const int ai = 10;
int ai2 = const_cast<int>(ai);//error
const int* pai = &ai;
int* pai2 = const_cast<int*>(pai);//ok
- reinterpret_cast:编译时期进行类型转换的检查
将操作数内容解释为另一种不同的类型(能把操作数的类型都转了)
处理无关类型的转换,也就是两个转换类型之间没有什么关系。
常用于:
a. 将一个整型地址转换成指针,一种类型指针转换成另一种类型指针。按照转换后的内容重新解释内存中的内容
b.从一个指针类型转换成一个整型
以上是关于3.类型转换的主要内容,如果未能解决你的问题,请参考以下文章