我正在尝试理解operator <
的运算符重载语法,其中第二个const
单词需要编译器才能满意。
bool operator < (const point& rhs) const { // what's the rationale for the second const word here?
以这个struct
为例
struct point {
int x;
int y;
point () : x(0), y(0) {}
point (int _x, int _y) : x(_x), y(_y) {}
point operator + (const point& rhs) {
return point(this->x + rhs.x, this->y + rhs.y);
}
bool operator < (const point& rhs) const {
return this->x < rhs.x;
}
};
这将允许我将其用作mymap的密钥。
map<point,int> mymap;
方法声明末尾的外部const
告诉编译器该方法的*this
对象将是const
。
CCD_ 7将其密钥存储为CCD_。因此,应用于键的任何运算符都需要标记为const
,否则它们将无法编译。默认情况下,std::map
使用operator<
对其密钥进行排序并比较它们是否相等。
此外,作为一种良好的实践,任何不修改*this
内容的成员方法/运算符都应该标记为const
。这样做可以让用户知道这样的操作是只读的,并让编译器在const
对象的表达式中使用它们。
末尾的const
表示函数不会更改调用对象。这允许在const
对象上调用函数。
第二个const
是隐含参数this
所指向对象的限定符。这意味着该方法不允许修改其对象。事实上,比较不需要——也不应该——修改被比较的对象。