【问题标题】:How do you reverse a strong_ordering?你如何反转strong_ordering?
【发布时间】:2020-05-22 01:03:23
【问题描述】:

有没有更简单的方法可以实现这个功能的效果?

strong_ordering reverse(strong_ordering v) {
    if (v > 0)
        return strong_ordering::less;
    else if (v < 0)
        return strong_ordering::greater;
    else
        return v;
}

【问题讨论】:

    标签: c++ c++20 spaceship-operator


    【解决方案1】:

    是的:

    strong_ordering reverse(strong_ordering v)
    {
        return 0 <=> v;
    }
    

    这是literally specified as what you want

    返回v &lt; 0 ? strong_­ordering​::​greater : v &gt; 0 ? strong_­ordering​::​less : v.

    这遵循x &lt;=&gt; yy &lt;=&gt; x是相反的一般原则,v &lt;=&gt; 0只是v的恒等运算。

    【讨论】:

    • strong_ordering::equalstrong_ordering::equivalent 替换0 也可以,对吧?
    • 我使用 clang 11.0.0 编译器,并得到一个无效的操作数到二进制表达式错误。编译器还不支持这个功能吗?
    • @nullptr clang 10 甚至还没有发布......但是 clang 和 gcc 在主干上都支持这个:godbolt.org/z/kDQxFY
    • @ShadowRanger 不,它不会。 strong_ordering 本身不是 &lt;=&gt;-able,只针对 0
    • @nullptr 您使用的编译器可能不支持这个,对&lt;=&gt; 的支持是最近才出现的。但正如我之前所展示的,clang 和 gcc 上的 trunk 现在都支持这一点(但还没有正式版本)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-09
    • 2021-02-02
    • 1970-01-01
    • 1970-01-01
    • 2023-01-05
    • 2011-12-01
    • 1970-01-01
    相关资源
    最近更新 更多