标签: c++ language-lawyer qa-c
我们正在使用QA-C来实现MISRA C ++的一致性,但是该工具会针对以下代码产生错误:
float a = foo(); float b = bar(); float c = a - b;
据我了解,这没有隐式类型提升,因为一切都将以float大小的块进行,但是该工具告诉我,减法会导致这种情况。有没有可能出现隐性晋升的情况?
float
答案 0 :(得分:15)
此处不涉及隐式提升。
涉及涉及二进制运算符的转换时,它们称为通常的算术转换。
根据C ++标准,[expr]/11:
[expr]/11
11许多期望算术或枚举类型的操作数的二进制运算符都会导致转换和产生 结果类型以类似的方式。 目的是产生一个通用类型,它也是结果的类型。 这种模式称为通常的算术转换,定义如下: ... (11.4)— 否则,如果其中一个操作数为float,则另一个应转换为float。
由于在您的示例中两个操作数均为float,因此没有这种转换或提升。 因此,这可能是该工具的误报。