"float = float - float" 中是否存在隐式类型提升?

10
我们正在使用QA-C进行MISRA C++合规性测试,但该工具对于以下代码会产生错误信息:
float a = foo();
float b = bar();
float c = a - b;

据我所了解,由于所有计算都是以 float 为单位进行的,因此这个过程没有隐式类型提升,但工具告诉我减法会导致隐式提升。是否存在某些情况会发生隐式提升呢?

13
请问您能否提供具体的错误信息? - Max Langhof
1
也可以考虑参考这个问答,也许你正在使用的工具误解了该回答的第二部分所述内容。 - Bob__
3
@Damon 这是一个不恰当的推论; 在这种情况下,short会被提升为int,但仍然有使用short的意义。 - M.M
1
@Damon "整型提升" 将 short 转换为 int(在常见系统中) - M.M
3
@Damon,你已经引用了文字,其中说“必须对两者进行积分推广”,而不是“可以发生”或其他什么。 - M.M
显示剩余7条评论
1个回答

15

这里没有隐式提升。

当涉及到二元运算的转换时,它们被称为通常算术转换

来自 C++ 标准的[expr]/11:

11 许多二元运算符期望算术类型或枚举类型的操作数,会执行转换并以类似的方式生成结果类型。目的是产生一个通用类型,也是结果的类型。这个模式称为通常算术转换,其定义如下:
...
(11.4) — 否则,如果任一操作数是float类型,则另一个操作数应该转换为float类型。

由于您的示例中两个操作数都是float类型,因此不存在此类转换或提升。
因此,这可能是工具给出的误报。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接