10

我们正在使用 QA-C 来实现 MISRA C++ 一致性,但该工具会针对如下代码显示错误:

float a = foo();
float b = bar();
float c = a - b;

据我了解,这没有隐式类型提升,因为一切都将发生在 -float大小的块中,但该工具告诉我减法会导致一个。是否存在可能存在隐式提升的情况?

4

1 回答 1

15

这里不涉及隐式提升。

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

根据 C++ 标准,[expr]/11

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

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

于 2019-04-26T07:52:07.627 回答