我决定使用NAN
(也尝试std::numeric_limits::quiet_NaN()
)作为函数参数的默认值,但当我尝试使用std::isnan
进行检查时,它返回{{1} }。同时,使用false
将值打印到控制台,我看到qDebug()
。
我还尝试使用nan
规则检查NAN
。它适用于x != x
,但NAN != NAN
获得了false
。
最后一次尝试是在函数内部定义x != x
双变量并尝试使用这两种方法检查它,但它会导致相同的结果。
我无法理解错误。
示例:
NAN
输出:
double abc = NAN;
qDebug()<< abc << (abc != abc) << std::isnan(abc);
答案 0 :(得分:5)
我不知道我们在项目中使用-ffast-math
。这就是导致问题的原因。感谢您的关注和评论。如果您使用-ffast-math
,则无法解决问题。您只需要寻找另一种方法来解决您的问题(没有NAN
)
答案 1 :(得分:2)
std::optional<double>
会这样做,然后在你闲暇时你可以专门使用显式NAN位模式来指示未设置的值。该值不会通过FPU寄存器传递,-ffast-math
不会影响它。您不仅可以清楚地指出可选参数的意图,而且还可以使其符合编译器:)