【发布时间】:2021-08-07 07:46:12
【问题描述】:
新的 C++20 宇宙飞船运算符是否允许以简洁的方式表达短路的多标准比较?比这更好的东西:
const firstCriteriaComparisonResult = lhs.x <=> rhs.x;
return firstCriteriaComparisonResult != 0 ? firstCriteriaComparisonResult : lhs.y <=> rhs.y;
【问题讨论】:
-
我的印象是它会自动进行成员比较; cppreference says yes.
-
也就是说,如果您只想比较一个或两个元素而不是 所有 个元素,只需执行正常的比较重载即可。
-
重新评论1:如果
operator<=>()成员必须是模板函数(在RHS类型上模板化),那么它必须是手写的。模板操作员不能是= defaulted。重新评论 2:没有“正常的比较重载”,从来没有。比较重载一直是一团糟,语言中添加了三向比较运算符正是为了解决这个问题。
标签: c++ c++20 spaceship-operator