【问题标题】:C++ spaceship operator multilevel compare?C ++宇宙飞船运算符多级比较?
【发布时间】: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&lt;=&gt;()成员必须是模板函数(在RHS类型上模板化),那么它必须是手写的。模板操作员不能是= defaulted。重新评论 2:没有“正常的比较重载”,从来没有。比较重载一直是一团糟,语言中添加了三向比较运算符正是为了解决这个问题。

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


【解决方案1】:

通常的tie-and-compare 方法也适用于宇宙飞船:

return std::tie(lhs.x, lhs.y) <=> std::tie(rhs.x, rhs.y);

【讨论】:

  • 我真的不知道那个!十年后我又回到了 C++,std::tie() 显然已经差不多了。
猜你喜欢
  • 2018-05-08
  • 2015-06-10
  • 2011-03-04
  • 2010-10-24
  • 1970-01-01
  • 2021-07-27
  • 2011-01-30
  • 1970-01-01
相关资源
最近更新 更多