我看到了以下代码:
struct Point
{
int x,y;
bool operator <(const Point &p) const {
return x<p.x||(x==p.x&&y<p.y);
}
};
Run Code Online (Sandbox Code Playgroud)
我不明白这是什么东西:
bool operator <(const Point &p) const {
return x<p.x||(x==p.x&&y<p.y);
}
Run Code Online (Sandbox Code Playgroud)
它是什么?
看,这很简单.
您已经定义了一个表示点的结构.假设你有两个这样的结构,有问题的代码为它们定义了一个比较运算符,这样你就可以编写类似的结构
if (pt1 < pt2) { ...
Run Code Online (Sandbox Code Playgroud)
编译器如何处理<符号?在C++中,它执行以下操作:表达式pt1 < pt2被解释为pt1.operator < (pt2).也就是说,调用具有特殊名称对象的方法,参数等于.operator <pt1pt2
让我们看看它在做什么.const Point &p在其参数中表示要比较的另一个操作数.const说我们不会修改操作数(这允许编译器生成更有效的代码),并且&意味着我们不是复制struct传递的,而是使用实际的Point实例(这再次更快,因为没有复制完成比较).
现在,表达式x<p.x检查x左侧操作数的值(它是this对象,即方法运行的上下文中的对象)*是否与x右侧操作数相对应.接下来,代码检查左手x等于右手的情况,因此y比较.
*对于语言纯粹主义者:措辞不准确,但对于面向初学者的解释,它应该没问题.