我看到了以下代码:
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);
}
这是什么?
答案 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。