了解在 STL 映射中使用的运算符重载 'const' 语法
Understanding operator overloading 'const' syntax for use in STL map
我正在尝试理解 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
表示该函数不会改变调用它的对象。这允许在 const
个对象上调用函数。
第二个 const
是隐含参数 this
指向的对象的限定符。这意味着不允许该方法修改其对象。事实上,比较不需要 - 也不应该 - 修改被比较的对象。
方法声明末尾的外部 const
告诉编译器该方法的 *this
对象是 const
.
std::map
将其键存储为 const
值。所以任何应用于键的运算符都需要标记为const
,否则它们将无法编译。 std::map
默认使用 operator<
对其键进行排序并比较它们是否相等。
此外,作为良好做法,任何不修改 *this
内容的成员 method/operator 无论如何都应标记为 const
。这样做让用户知道此类操作是只读的,并让编译器在 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
表示该函数不会改变调用它的对象。这允许在 const
个对象上调用函数。
第二个 const
是隐含参数 this
指向的对象的限定符。这意味着不允许该方法修改其对象。事实上,比较不需要 - 也不应该 - 修改被比较的对象。
方法声明末尾的外部 const
告诉编译器该方法的 *this
对象是 const
.
std::map
将其键存储为 const
值。所以任何应用于键的运算符都需要标记为const
,否则它们将无法编译。 std::map
默认使用 operator<
对其键进行排序并比较它们是否相等。
此外,作为良好做法,任何不修改 *this
内容的成员 method/operator 无论如何都应标记为 const
。这样做让用户知道此类操作是只读的,并让编译器在 const
对象的表达式中使用它们。