函数标识符与参数间的<符号含义及operator后<的作用是什么?
关于C++结构体中
operator<的解释 先直接给你结论:你问的这两个问题其实是同一个点——这里的<是用来重载C++的小于比较运算符,让你自定义的point结构体对象能像int、string这些内置类型一样,用<符号来比较大小。
咱们拆解来看这段代码:
struct point { int x, y; bool operator<(const point &p) { if (x == p.x) return y < p.y; else return x < p.x; } };
具体细节说明
operator<是C++运算符重载的固定语法:operator是关键字,后面跟你要重载的运算符(这里就是<),所以operator<整体代表“小于运算符重载函数”。你问的两个问题里的<都是这个重载语法的一部分,本质是一回事——就是告诉编译器:当两个point对象用<比较时,就执行这个函数里的逻辑。- 函数的参数
const point &p是要和当前对象比较的另一个point实例,加const是保证不会修改传入的对象,用引用是避免拷贝,提升效率。 - 函数体里的逻辑是自定义的比较规则:先比x坐标,x相同就比y坐标,这样就给
point对象定义了一个“排序优先级”——按x升序,x相等则按y升序。
举个实际使用的例子,现在你可以像这样直接比较两个point对象:
point p1 = {2, 5}; point p2 = {2, 3}; if (p2 < p1) { // 这里会调用我们重载的operator<,返回true // 执行你需要的逻辑 }
这种重载非常实用,比如当你把point对象放进std::set容器,或者用std::sort对point数组排序时,编译器会自动调用这个重载的<运算符来完成比较和排序工作。
内容的提问来源于stack exchange,提问作者Siddhartha Shrestha
相关产品推荐
相关产品推荐

