运营商<! - 的用途是什么?

时间:2015-07-24 10:39:49

标签: c++ operator-overloading

请在下面的代码段中,如果有人可以澄清bool operator<...的功能是什么以及为何将其用作函数?

bool operator<(const RankedFace& other) const
{
  if (lastDelay == other.lastDelay)
    return face.getId() < other.face.getId();

  return lastDelay < other.lastDelay;
}

3 个答案:

答案 0 :(得分:4)

这是用户定义类型operator<的(在类中)定义(我猜是RankedFace)。

由于该代码,您可以将RankedFace类型的两个对象与<进行比较,例如if( r1 < r2 ) // do something...

答案 1 :(得分:2)

它为类型RankedFace提供了一个小于比较(operator<)。如宣布;它看起来像一个成员方法。它也可能是具有以下签名的非成员方法;

bool operator<(const RankedFace& lys, const RankedFace& rhs)

通常需要在标准库关联容器(std::set等)中使用。

关联容器需要比较器来对其中的对象进行排序。可以使用自定义比较器,但标准比较器为std::less,它只是lhs < rhs

它允许客户端代码在该类型的对象(face1 < face2)上使用少于比较。它通常(并非总是)与其他比较器(==!=<=等)一起实施。如果已实施operator<operator==,则可以使用std::rel_ops实施剩余的{{1}}。

答案 2 :(得分:1)

这是RankedFace的{​​{3}}。它比较了两个RankedFace个对象。例如:

RankedFace foo;
RankedFace bar;

cout << foo < bar ? "foo is smaller than bar" : "bar is greater than or equal to foo";

在上面的代码foo < bar导致C ++调用foo.operator<(bar)

RankedFace::operator<的解剖揭示了它:

  1. 将具有较低lastDelay成员的对象视为较小的对象
  2. 对于具有相同lastDelay s的对象,它会将对象返回较小的getId()较小的对象。
  3. RankedFace之间的实际代码比较可能不存在。实施小于运营商的动机可能是小于运营商需要在less than operatorassociative container中的密钥中使用RankedFace