c++中的类型转换
1、隐式类型转换规则:
这种转换常见于两个不同类型的操作数进行运算的时候会发生。
(1) 如果操作数有浮点类型,则会转换成浮点类型
例如:(int) + (float) ---> (float) + (float)
(int) + (double) ---> (double) + (double)
(2) 如果两个操作数都是整型,但是级别不同,会进行整型提升
当两个操作数都是 有/无 符号类型的时候,将级别低的转成级别高的类型 例如:(short) + (int) -----> (int) + (int)
当两个操作数,一个是有符号类型,另一个是无符号类型,无符号类型的级别比有符号类型要高,那么把有符号的类型转成无符号类型
当两个操作数,一个是有符号类型,另一个是无符号类型,无符号类型的级别比有符号低,且有符号可以容纳无符号全部的值(字节数更大),那么把无符号转成有符号类型。
否则,两者转成有符号的无符号类型。
2、函数参数的类型转换:
当函数的实参类型比形参规定的类型要低就会进行整型提升 例如:f(int i){} short i = 1 ; f(i) 这个时候 i 会进行类型提升到 int
同理 float -----> double
3、强制类型转换:
c语言中的强制类型转换方式: (typename)value
c++中的强制类型转换方式:typename(value)
c++中后续提供了4种更安全的类型转换方式,其中一种是 static_cast<typename>()
4、auto关键字
c++重新定义了auto关键字,可以根据字面值的类型来决定变量的类型。 例如: auto a = 1.0f; 这个时候 a 会自动变成 float类型
auto设计出来是用于复杂的复合类型声明之用的,这个在后续学习STL模板库的时候,会再次提到。