如何在长表达式中提升操作数?

时间:2015-01-22 07:01:21

标签: c++ types casting promotions

如果我有如下表达式:

double d = floatVar / intVar;

intVar将被提升为float,然后返回的float结果将转换为double并分配给d。但是如果我有一个长表达式会发生什么,例如:

double d = floatVar / intVar * shortVar + charVar + intVar2;

是否会将所有变量提升为float,然后返回的float结果将转换为double并分配给d

如果我有以下内容:

double d = (floatVar / intVar) * shortVar + charVar + intVar2;

intVar转换为float,而shortVarcharVar将转换为int,然后返回int来自shortVar + charVar + intVar2的结果将转换为float并与float的返回(floatVar / intVar)结果相乘,此返回的float结果将转换为加倍并分配到d

1 个答案:

答案 0 :(得分:2)

运营顺序适用。 /*以及+都是左关联的,/*具有相同的优先级(大于+的优先级),所以这个:

double b = floatVar / intVar * shortVar + charVar + intVar2;

相当于:

double b = (((floatVar / intVar) * shortVar) + charVar) + intVar2;

在每个步骤执行相应的转换:intVar转换为floatshortVar转换为floatcharVar转换为{ {1}},float转换为intVar2。最终结果将提升为float

另一方面,如果您要将double括在括号中以强制执行该操作,那么charVar + intVar2将被提升为charVar(假设该范围int的{​​{1}}符合char的范围,就像您可能遇到的几乎所有系统一样,并且结果总和将转换为int