我们正在使用QA-C来实现MISRA C++一致性,但是该工具为这样的代码提供了一个错误:
float a = foo(); float b = bar(); float c = a - b;
据我所知,这没有隐式类型提升,因为所有事情都会发生在float-sized块中,但是工具告诉我减法会导致一次。有没有可能有隐性晋升的情况?
float
发布于 2019-04-26 07:52:07
这里没有隐含的晋升。
当涉及二进制运算符的转换时,它们被称为通常的算术转换。
来自C++标准,[expr]/11
11许多期望算术或枚举类型操作数的二进制运算符以类似的方式引起转换和结果类型。目的是产生一个公共类型,这也是结果的类型。这种模式称为通常的算术转换,定义如下: ..。 (11.4) -否则为,如果其中一个操作数为,则另一个操作数应转换为**
因为在您的示例中这两个操作数都是float,所以没有这样的转换或升级。
所以这可能是工具中的假阳性。
https://stackoverflow.com/questions/55863031
相似问题