了解在 STL 映射中使用的运算符重载"const"语法



我正在尝试理解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所指向对象的限定符。这意味着该方法不允许修改其对象。事实上,比较不需要——也不应该——修改被比较的对象。

相关内容

  • 没有找到相关文章

最新更新