这可能是自行车脱落,但也许我错过了一些有趣的东西......
如果一个类将一个成员初始化val
为std::numeric_limits<double>::infinity()
然后想要检查 val 是否已更改为有效的值(+/- inf 在这里无效),这三种方法的权衡是什么,我是否错过了任何其他有趣的方法来解决这个问题. (为了便于阅读,在示例中删除了 const。)
bool IsInit() { return MinX != std::numeric_limits<double>::infinity(); } // a
bool IsInit() { return !std::isinf(MinX); } // b
bool IsInit() { return std::isfinite(MinX); } // c
目前代码是 C++03,但随着 C++11、C++14 和 C++17 的变化,选项将如何变化。例如,对于 C++17,此代码可能只是std::optional<double> val
. 或者如果 +/-inf 在未来变得有效,那么安静的 NaN 会是一个更安全的选择吗?
当我阅读此代码的此补丁时出现了这种情况:
- https://github.com/OSGeo/gdal/commit/30194c640f403008625ff0c8be7aca155ac7ebe1
- https://trac.osgeo.org/gdal/browser/trunk/gdal/ogr/ogr_core.h?rev=37821#L76
为了方便参考:
排序相关: