为类int类型实现NaN算术的C++17惯用方法是什么?特别是,当任何一个参数都是NaN时,加(或减)应该恰好产生NaN。
这个
standard
明确地将int排除在这种默认行为之外。即使
quiet_NaN
退货
zero
,对于日常使用来说太危险了。)
我的起点是一个对于我的应用程序来说足够越界的值,
constexpr int my_NaN = std::numeric_limits<int>::max();
在C中,您可以替换每个
x + y
用一个
my_add(x, y)
其针对my_ NaN测试x和y。丑陋的
在Ruby中,您可以用monkeypatch类Integer
def +(other) self==my_NaN ? my_NaN : ...
,愉快地
x+y
像往常一样。
C++17能接近Ruby让您保留传统中缀表示法的方式吗?
除了一个基本的int,我还希望这样做
std::chrono::duration<int64_t, std::micro>
以及相应的
time_point
。我对压倒所有不同的加减法感到不寒而栗。