隐含转换 | ||
一些二元运算符(算术运算符、关系运算符、逻辑运算符、位运算符和赋值运算符)要求两个操作数的类型一致 在算数运算和关系运算中如果参与运算的操作数类型不一致,编译系统会自动对数据进行转换(既隐含转换),基本原则是将低类型数据转换为高类型数据 数据类型由低到高的次序: 低 char(unsigned)↓ short(unsigned)↓ int(unsigned)↓ long(unsigned)↓ long long↓ float高 double | ||
条件 | 转换 | |
有一个操作数是long double型。 | 将另一个操作数转换为long double型。 | |
前述条件不满足,并且有一个操作数是double型。 | 将另一个操作数转换为double型。 | |
前述条件不满足,并且有一个操作数是float型。 | 将另一个操作数转换为float型。 | |
前述条件不满足(两个操作数都不是浮点数)。 | 有一个操作数是 unsigned long long型 | 将另一个操作数转换为 unsigned long long 型 |
有一个操作数是long long型,另一个操作数是unsigned long型。 | 将两个操作数都转换为 unsigned long long 型 | |
前述条件不满足,并且有一个操作数是 unsigned long型。 | 将另一个操作数转换为 unsigned long 型 | |
前述条件不满足,并且有一个操作数是long型,另一个操作数是 unsigned int型。 | 将两个操作数都转换为 unsigned long 型 | |
前述条件不满足,并且有一个操作数是 long型。 | 将另一个操作数转换为 long 型 | |
前述条件不满足,并且有一个操作数是 unsigned int型。 | 将另一个操作数转换为 unsigned int 型 | |
前述条件都不满足 | 将两个操作数都转换为 int 型 |
混合运算时数据类型的转换 |
将一个非布尔类型的算数值赋给布尔类型时,算数值为0结果为false,否则结果为true |
将一个布尔值赋给非布尔类型时,布尔值为false则结果为0,布尔值为true则结果为1 |
将一个浮点数赋值给整数类型时,结果值将只保留浮点数中的整数部分,小数部分将丢失(这个过程不会发生四舍五入,就纯粹是把小数部分给舍掉了) |
将一个整数值赋值给浮点数类型时,小数部分记为0,如果整数所占的空间超过了浮点类型的容量,精度可能有损失 |
显式转换 | |
显式类型转换的作用是将表达式的结果类型转换为类型说明符所指定的类型 | |
语法形式 | C语言类型显式转换方式: 类型说明符(表达式) (类型说明符)表达式 C++类型显式转换方式: 类型转换操作符<类型说明符>(表达式) |
类型转换操作符 | const_cast 删除const变量的属性,方便赋值 dynamic_cast 用于将一个父类对象的指针转换为子类对象的指针或引用 reinterpret_cast 将一种类型转换为另一种不同的类型 static_cast 用于静态转换,任何转换都可以用它,但他不能用于两个不相关的类型转换。 |