1.隐式转换:
从概念上来说,隐式转换就是编译器帮你转换的,你看不见的。
例子:
int a = 3.54 + 4;
这个例子很明显a=7。但是从类型的转换顺序来看,可能与自己想的不太一样。
当在表达式中,含有int与double,那么int会转化成double类型,例子中的4就会转换成doulb类型,得到结果7.54这个doulbe类型的值。
但是,a的类型是不能改变的,所以double又转换成为int,得到7.
2.算术转换
概念:将一种算术类型转换成另一种算术类型。
最明显的例子就是运算符的运算对象会转换成最宽的类型,如果算术中含有long double,那么不管其他类型是什么都会转换成long double。
还有一个例子就是第一点中提到的,double 与int共存时候,会自动转换成double。
3.整形提升
概念:把小整数类型转换成大整数类型。例如bool中的false提升为int的0,true提升为int的1.
较大的char类型(wchar_t,char16_t,char32_t)提升为int,unsigned int,long unsigned long,long long,unsigned long long 中最小的类型,前提就是转换后的类型
要包含原来的类型的所有可能的值。
4.数组转换成指针
数组会自动转换成为指向数组首元素的指针。当然,在decltype & sizeof typeid 中是不会有类似的转换。
int ia[10];
int* p=ia;