1 隐式转换
1.1隐式转换情况:
(1) 在条件语句中,会自动把非布尔值转换成布尔值;
(2) 在变量初始化和赋值的过程中,右侧对象类型会自动转换成左侧对象类型
(3) 在算术运算中,所有变量会先统一成同一数据类型,在进行计算
1.2 隐式转换的规则:
(1) 小整形(bool、char、unsigned char、short、unsigned short)在算术运算中遇到比int所占空间不小的类型变量时候,小整形变量会先转换成int类型变量;
(2)如果含有小整形变量算术运算中,先进行(1),然后, 在算术运算中所占空间小的变量会自动转换成式子中最大空间的类型,例如 3.14+'a'中 'a'会自动转换成int,再从int转换成double
(3)如果无符号类型与有符号类型进行运算时候,如果无符号类型变量所占空间>=有符号类型变量所占空间,有符号类型会自动转换成无符号类型类型;另外一种情况有符号类型变量所占空间>无符号类型变量所占空间,如果无符号类型能自动转换有符号类型就转换,如果不能,那么会将有符号类型转成无符号类型。
char cval;
int ival;
unsigned int ui;
float fval;
double dval;
cout << sizeof(cval) << " c: " << sizeof(ival) << " i: " << sizeof(ui) << " ui: "
<< sizeof(fval) << " f: " << sizeof(dval) << " d:"<< endl;
cout << sizeof(cval = 'a'+3) << endl;
cout << sizeof (fval=(ui-(ival * 1.0))) << endl;
cout << ui*fval << endl; // 4.39882e-032 类型 float
cout << sizeof(ui*fval) << endl;
cout << sizeof(dval=ui*fval) << endl; // float-> double
return 0;
2 显示转换
强制类型转换形式
cast-name<type>(表达式) 其中:cast-name包括 static_cast、dynamic_cast、const_cast中的一种,type:要转换的类型
(1) static_cast: 是针对普通变量强制类型变量类型
(2) const_cast:是改变对象的底层const