在 C++ 中使用 NaN 的最佳方式是什么?
我找到了 std::numeric_limits<double>::quiet_NaN()
和 std::numeric_limits<double>::signaling_NaN()
.我想使用 signaling_NaN
表示一个未初始化的变量如下:
double diameter = std::numeric_limits<double>::signaling_NaN();
但是,这会在分配时发出信号(引发异常)。我希望它在使用时引发异常,而不是在分配时引发异常。
有什么方法可以使用signaling_NaN
没有提出分配异常(exception)? signaling_NaN
有没有好的便携替代品?使用时会引发浮点异常?
最佳答案
在进一步研究之后,看起来 signaling_NaN
没有提供。如果启用了浮点异常,则调用它算作处理信号 NaN,因此它会立即引发异常。如果禁用浮点异常,则处理信号 NaN 会自动将其降级为安静的 NaN,因此 signaling_NaN
无论如何都不起作用。
Menkboy's code有效,但尝试使用信号 NaN 会遇到其他问题:没有可移植的方法来启用或禁用浮点异常(如 here 和 here 所述),如果您依赖启用的异常,第三方代码可能会禁用它们(如 here 所述)。
所以看起来像 Motti's solution确实是最好的选择。
关于c++ - 在 C++ 中使用 NaN?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/235386/