0

我看到了以下代码:

struct Point
{
    int x,y;
    bool operator <(const Point &p) const {
        return x<p.x||(x==p.x&&y<p.y);
    }
};

我不明白这是什么东西:

 bool operator <(const Point &p) const {
      return x<p.x||(x==p.x&&y<p.y);
 } 

它是什么?

4

4 回答 4

7

看,很简单。

您已经定义了一个表示点的结构。假设你有两个这样的结构,有问题的代码为它们定义了一个比较运算符,这样你就可以编写类似的东西

if (pt1 < pt2) { ...

编译器如何处理<符号?在 C++ 中,它执行以下操作:表达式pt1 < pt2被解释为pt1.operator < (pt2). 即调用具有特殊名称对象的方法,参数等于。operator <pt1pt2

让我们看看它在做什么。const Point &p在其参数中表示正在比较的另一个操作数。const表示我们不会修改操作数(这允许编译器生成更有效的代码),并且&意味着我们不是复制struct传递的,而是使用实际Point实例(这再次更快,因为没有为比较)。

现在,表达式x<p.x检查x左侧操作数的值(它是this对象,即方法正在运行的上下文中的对象)* 与x右侧操作数的值是否相符。接下来,代码检查左手x等于右手的情况,因此y比较 's。


*对于语言纯粹主义者:措辞不准确,但对于面向初学者的解释应该没问题。

于 2012-05-30T19:27:56.430 回答
2

operator在这种特殊情况下,它是 , 的定义operator <。当有人这样做时,它会被调用:

Point a, b;
if( a < b )
{ 
    //...
}
于 2012-05-30T19:27:01.170 回答
1

<它是一个重载运算符的成员函数

Point a,b;
a < b; // the member function is used here.
于 2012-05-30T19:27:23.700 回答
1

在 C++ 中,结构与类非常相似。您看到的是作为实例方法的运算符定义。const它将“this”点与作为参数“p”引用的(不可修改的)点进行比较,并且由于参数列表之后的原因,不允许修改“this”点。

于 2012-05-30T19:29:05.027 回答