C++太空船运算符多级比较?

4
新的C++20太空船运算符是否允许以简洁的方式表达短路的多条件比较?比如说比下面这个更好:
const firstCriteriaComparisonResult = lhs.x <=> rhs.x;
return firstCriteriaComparisonResult != 0 ? firstCriteriaComparisonResult : lhs.y <=> rhs.y;

我曾经认为它会自动执行成员逐一比较;cppreference确认了这一点。 - Casey
1
话虽如此,如果你只想比较一个或两个元素而不是所有元素,那么只需进行正常的比较重载即可。 - Casey
关于评论1:如果operator<=>()成员必须是一个模板函数(以RHS类型为模板参数),那么它必须手动编写。模板操作符不能被= default。关于评论2:没有“正常的比较重载”,也从来没有过。比较重载一直是个混乱的问题,而三路比较运算符正是为了解决这个问题而添加到语言中的。 - Szczepan Hołyszewski
1个回答

8
通常的“连接和比较”方法也适用于太空船运算符:
return std::tie(lhs.x, lhs.y) <=> std::tie(rhs.x, rhs.y);

我真的不知道那个!我在十年后回到C++,而std::tie()显然已经有那么久了。 - Szczepan Hołyszewski

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