1、static_cast方法
1)基础数据类型指针和对象指针不能用
2)继承关系的对象的指针可以进行转换
3)相关类型转换。
double f = 100.34f;
int i1 = (int)f; //c风格
int i2 = static_cast<int>(f); //c++风格
4)void*与其他类型指针间转换。
int i = 10;
int *p = &i;
void *q = static_cast<void *>(p);
int *db = static_cast<int *>(q);
static_cast用于内置的数据类型还有具有继承关系的指针或者引用的转换
2、dynamic_cast方法
结论:
dynamic_cast方法只能转换具有继承关系的指针或者引用,并且只能由子类型转换为基类型
3、const_cast方法
去掉指针或者引用的const属性
const_cast用于将const去掉或者增加,不过不是用于原来的变量
4、reinterpret_cast方法
用来处理无关类型的转换,任意转,按照转换后的类型重新解释内存中的内容。
强制类型转换,即使无关的指针类型,包括函数指针都可以进行类型转换
总结
方法 | 说明 | 适用于 | 不适用于 |
---|---|---|---|
static_cast | static_cast用来表示明确的转换 | 整型和浮点型、字符与整形、转换运算符、空指针转换为任何目标类型指针 | 不同类型的指针之间互相转换、整型和指针之间的互相转换、不同类型的引用之间的转换 |
dynamic_cast | 转换具有继承关系的指针或者引用 | 类层次间的上行转换和下行转换,还可以用于类之间的交叉转换 | 不能用于父类转换为子类 |
const_cast | 用于const与非常量 | 1、常量指针 被强转为 非常量指针,且仍然指向原来的对象;2、常量引用 被强转为 非常量引用,且仍然指向原来的对象;3、常量对象被强转为非常量对象。 | |
reinterpret_cast | 强制类型转换 | 即使无关的指针类型,包括函数指针都可以进行类型转换 |
1、程序员必须清楚知道要转变的变量,转换前是什么类型,转换后是什么类型,以及转换后有什么后果。
2、一般情况下不建议类型转换,避免进行类型转换