表达式中的类型转换分为两种:
隐含转换和显式转换。
1.隐含转换
算术运算符、关系运算符、逻辑运算符、位运算符和赋值运算符这些二元运算符要求两个操作数的类型一致。
在算术运算和关系运算中如果参与运算的操作数类型不一致,编译系统将会自动对数据进行转换,即隐含转换。
基本原则:将低类型数据转换为高类型数据
低-------------------->高
char short int unsigned
long unsigned long float
double
逻辑运算符要求参与运算的操作数必须是bool型,如果不是,则
非0数据转换为true,0转换为false
位运算的操作数必须是整数,二元位运算的操作数整数类型不同时,隐含转换
赋值运算要求左值与右值类型相同,编译系统会自动进行类型转换,但规则是一律将右值转换为左值的类型
float fVal;
double dVal;
int iVal;
unsigned long ulVal;
dVal=iVal*uVal;//iVal被转换为unsigned long,
//乘法运算的结果被转换为double
dVal=ulVal+fVal;//ulVal被转换为float,
//加法运算的结果被转换为double
2.显示转换
显示类型转换的作用是将表达式的结果类型转换为另一种指定的类型
(1)
类型说明符(表达式)
(类型说明符)表达式
上面两种形式不同,功能相同
例:
float z=7.56,fractionPart;
int wholePart;
wholePart=int(z);//将float型转换为int型时,
//取整数部分,舍弃小数部分
fractionPart=z-(int)z;//用z减去其整数部分,
//得到小数部分
(2)
4种类型转换操作符:
static_cast,dynamic_cast,
const_cast,reinterpret_cast
语法形式:
dynamic_cast<类型说明符>(表达式)
const_casy<类型说明符>(表达式)
reinterpret_cast<类型说明符>(表达式)
static_cast<类型说明符>(表达式)
后三种类型功能都可以用(1)中语法来描述。
static_cast适用于基本数据类型之间的转换,例如,上例中int(z)和(int)z都可以替换为static_cast<int>(z)
注意:
显示类型转换可能是不安全的(精度损失)
这种转换是暂时的、一次性的
----------C++语言学习笔记----------