You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++中默认三路比较运算符如何比较对象?以Rational类为例

C++默认<=>运算符的比较逻辑详解

核心结论

默认生成的operator<=>会按照类中数据成员的声明顺序,以字典序依次比较所有非静态数据成员:

  • 先比较第一个成员,若两者不等,直接得出整体比较结果,不再比较后续成员;
  • 只有当前面的成员全部相等时,才会继续比较下一个成员。

针对你的代码示例分析

你的Rational类中,数据成员声明顺序是numerator在前,denominator在后。

看你创建的两个实例:

Rational rt1{-3, 2};
Rational rt2{3, -2}; 
  1. 首先比较rt1.numerator和rt2.numerator:-3 < 3,两者不相等;
  2. 此时直接判定rt1 < rt2的结果为true,不会再去比较denominator的值。

额外提醒(针对Rational类的实际问题)

从数学角度看,-3/2和3/-2是相等的,但默认比较会认为它们是不同的对象。如果你的Rational类需要符合数学意义的比较,不能用默认的operator<=>,必须自己实现比较逻辑:比如先将分数约分,统一分母为正数,再比较分子。

内容的提问来源于stack exchange,提问作者a_floating_point

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 12:22:32