我一直在阅读一些有关C ++ 20的consistent comparison(即operator<=>
)的信息,但无法理解strong_ordering
和weak_ordering
之间的实际区别( _equality
版本也是如此)。
除了非常描述类型的可替换性之外,它实际上会影响生成的代码吗?它会增加使用类型的约束吗?
希望看到一个现实的例子来证明这一点。
答案 0 :(得分:5)
它会增加使用类型的约束吗?
一个非常重要的约束(原始论文没有打算)是P0732采用strong_ordering
的重要性作为指示类类型可以用作非类型模板参数。 weak_ordering
在这种情况下还不够,因为模板等效性是如何工作的。
通常,某些算法可能只需要weak_ordering
,而另一些算法则需要strong_ordering
,因此能够在类型上进行注释可能意味着编译错误(提供的强排序不充分),而不是简单的无法在运行时满足算法要求,因此只是未定义的行为。但是我所知道的标准库和Ranges TS中的所有算法仅需要weak_ordering
。我不知道有人需要strong_ordering
离开我的头顶。
它实际上会影响生成的代码吗?
除了需要strong_ordering
或算法根据比较类别明确选择不同行为的情况之外,否。