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

Raj*_*nia 0 c++

我看到了以下代码:

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)

它是什么?

Vla*_*lad 7

看,这很简单.

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

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比较.


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