在C语言中转换类型的方法一般是使用强制转换,就如下列的转换方法
int i = ;
void *v = (void *)i;
在C++中类型的转换大致有四种:
1. dynamic_cast类型转换
(1) dynamic_cast是在运行时检查的,属于动态转换;
(2) 一般用于基类和派生类之间的相互转换。
QThread *thread = new QThread;
QObject *obj = dynamic_cast<QObject *>(thread);
2. static_cast类型转换
(1) static_cast会在编译的过程中进行安全性检查, 相对与dynamic_cast是静态转换;
(2) 一般用于内置数据类型的转换和通常的类之间的转换。
int i = ;
double d = static_cast<double>(i);
3. const_cast类型转换
主要是用于去掉指针和引用的const和volatile类型。
const int *p = ;
int *q = NULL;
q = const_cast<int *>(p);
4. reinterpret_cast类型转换
(1) reinterpret_cast是为了映射到一个完全不同类型的意思,这个关键词在我们需要把类型映射回原有类型时用到它。我们映射到的类型仅仅是为了故弄玄虚和其他目的,这是所有映射中最危险的。(这句话是C++编程思想中的原话)
(2) 用于完全没有关系指针或引用之间的转换,比如浮点型指针转整型指针;
(3) 相当于强制转换,不会考虑安全检查问题,这是需要值得注意的,不像dynamic_cast与static_cast进行安全检查。
int i = ;
double d = reinterpret_cast<double&>(i);