强排序和弱排序的实际含义

时间:2018-07-03 17:55:34

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

我一直在阅读一些有关C ++ 20的consistent comparison(即operator<=>)的信息,但无法理解strong_orderingweak_ordering之间的实际区别( _equality版本也是如此)。
除了非常描述类型的可替换性之外,它实际上会影响生成的代码吗?它会增加使用类型的约束吗?
希望看到一个现实的例子来证明这一点。

1 个答案:

答案 0 :(得分:5)

  

它会增加使用类型的约束吗?

一个非常重要的约束(原始论文没有打算)是P0732采用strong_ordering的重要性作为指示类类型可以用作非类型模板参数。 weak_ordering在这种情况下还不够,因为模板等效性是如何工作的。

通常,某些算法可能只需要weak_ordering,而另一些算法则需要strong_ordering,因此能够在类型上进行注释可能意味着编译错误(提供的强排序不充分),而不是简单的无法在运行时满足算法要求,因此只是未定义的行为。但是我所知道的标准库和Ranges TS中的所有算法仅需要weak_ordering。我不知道有人需要strong_ordering离开我的头顶。

  

它实际上会影响生成的代码吗?

除了需要strong_ordering或算法根据比较类别明确选择不同行为的情况之外,否。