什么是这个运算符<句法?

时间:2012-05-30 19:23:53

标签: c++

我看到了以下代码:

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 个答案:

答案 0 :(得分:7)

看,这很简单。

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

这样的结构
if (pt1 < pt2) { ...

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

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

现在,表达式x<p.x检查左侧操作数的x值(它是this对象,即该方法运行的上下文中的对象* *对抗右手操作数的x。接下来,代码检查左侧x等于右侧的情况,以便比较y


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

答案 1 :(得分:2)

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

Point a, b;
if( a < b )
{ 
    //...
}

答案 2 :(得分:1)

它是一个重载<运算符

的成员函数
Point a,b;
a < b; // the member function is used here.

答案 3 :(得分:1)

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