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

Ken*_*Y-N 10 c++ language-lawyer qa-c

我们正在使用QA-C来实现MISRA C ++的一致性,但是该工具会为以下代码喷出错误:

float a = foo();
float b = bar();
float c = a - b;
Run Code Online (Sandbox Code Playgroud)

据我了解,这没有隐式类型提升,因为一切都会以float大小的块形式发生,但是该工具告诉我,减法会导致这种情况。有没有可能出现隐性晋升的情况?

P.W*_*P.W 15

这里没有隐式提升。

当涉及到涉及二进制运算符的转换时,它们称为通常的算术转换

从C ++标准开始,[expr]/11

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

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