如何反转strong_ordering?

14

有没有更简单的方法来实现这个函数的效果?

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

15

没错:

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

иҝҷжҳҜеӯ—йқўдёҠжҢҮе®ҡзҡ„дҪ жғіиҰҒзҡ„пјҡ

иҝ”еӣһеҖјпјҡv < 0 ? strong_ВӯorderingвҖӢ::вҖӢgreater : v > 0 ? strong_ВӯorderingвҖӢ::вҖӢless : vгҖӮ

иҝҷйҒөеҫӘдәҶдёҖдёӘйҖҡз”ЁеҺҹеҲҷпјҢеҚіx <=> yе’Ңy <=> xжҳҜзӣёеҸҚзҡ„пјҢиҖҢv <=> 0еҸӘжҳҜеҜ№дәҺvиҝӣиЎҢиә«д»Ҫж“ҚдҪңгҖӮ


1
我使用的是clang 11.0.0编译器,并且遇到了一个"invalid operands to binary expression"错误。这个编译器还不支持这个特性吗? - nullptr
1
@ShadowRanger 不会的。strong_ordering 不能与自身进行 <=> 操作,只能与 0 进行操作。 - Barry
@Barry,所以strong_ordering没有强排序? - T.C.
@T.C. 是的,我不太确定我是否想要走强排序具有强排序、弱排序具有强排序,但偏序具有偏序的路线,你知道吗? - Barry
1
@nullptr 你正在使用的编译器可能不支持此功能,因为对于 <=> 的支持是非常近期的。但正如我之前展示的那样,clang 和 gcc 的 trunk 现在都支持这个功能(但尚未有官方发布版本支持)。 - Barry
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接