今天在看c++ primer 的时候,看见了c++ 的整型提升的概念
道理都看懂了。但是具体的情况稍微有点迷糊,
先上图:
vs文档中常用算术转换规定。
如果任一操作数是 long double 类型,则将另一个操作数转换为 long double 类型。
如果未满足上述条件,并且任一操作数是 double 类型,则将另一个操作数转换为 double 类型。
如果未满足上述两个条件,并且任一操作数是 float 类型,则将另一个操作数转换为 float 类型。
如果未满足上述三个条件(所有操作数都不是浮点型),则对操作数执行整型转换,如下所示:
如果任一操作数是 unsigned long 类型,则将另一个操作数转换为 unsigned long 类型。
如果未满足上述条件,并且任一操作数是 long 类型且另一个操作数是 unsigned int 类型,则将两个操作数都转换为 unsigned long类型。
如果未满足上述两个条件,并且任一操作数是 long类型,则将另一个操作数转换为 long 类型。
如果未满足上述三个条件,并且任一操作数是 unsigned int类型,则将另一个操作数转换为 unsigned int 类型。
如果未满足上述任何条件,则将两个操作数转换为 int 类型。
换句话说就是:如果某个操作数的类型在上面这个列表中排名较低,那么它首先将转换成另外一个操作数的类型然后执行。
如果这样来说,为什么
cval+fval 还是进行了整型提升后再转换为float
如果上面这段话是对的,那所谓的整型提升是在在cval这个内存中取值的时候发生的,取出这个值后,再检查fval的值,再进行隐式转换是么,如果是这样
为什么
cval+lval
不是cval先转换为int,再转换为long呢?