代码之家  ›  专栏  ›  技术社区  ›  Camille Goudeseune 123iamking

在C++17中实现int的NaN

  •  0
  • Camille Goudeseune 123iamking  · 技术社区  · 5 年前

    为类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 。我对压倒所有不同的加减法感到不寒而栗。

    0 回复  |  直到 5 年前
    推荐文章