我们使用QA-C进行MISRA C ++一致性,但该工具为这样的代码发出错误:
float a = foo(); float b = bar(); float c = a - b;
据我所知,这没有隐式的类型提升,因为一切都会发生在float大小的块中,但该工具告诉我减法导致一个。是否存在可能存在隐含促销的情况?
float
这里没有隐含的促销。
当涉及涉及二元运算符的转换时,它们被称为通常的算术转换。
从C ++标准,[expr]/11:
[expr]/11
11许多期望算术或枚举类型的操作数的二元运算符会以类似的方式引起转换并产生结果类型。目的是产生一个通用类型,它也是结果的类型。这种模式称为通常的算术转换,定义如下: ... (11.4) - 否则,如果任一操作数是float,则另一个操作数应转换为float。
由于在您的示例中两个操作数都是float,因此没有这样的转换或提升。 所以这可能是该工具的误报。