【发布时间】:2022-01-13 00:03:33
【问题描述】:
关于 SO 的最受欢迎的问题之一是处理各种运算符重载的问题。关于括号运算符operator[] 的重载,我有些不明白。我的问题是关于以下代码:
class X {
value_type& operator[](index_type idx);
const value_type& operator[](index_type idx) const;
// ...
};
这里操作符被重载了两次,一个允许改变成员的函数,一个不允许改变成员。我读到 c++ 不允许按返回类型重载函数,但这看起来像。 T& 更改为 const T&。有人可以向我解释一下这种“重载”到底是什么,为什么会这样?
提前致谢。
PS:如果这是因为第二个 const 关键字将“不可见”this 指针参数更改为 const this 而有效,那么我理解,但仍然有这种做法的名称吗?
【问题讨论】:
-
给定一个定义为
X a的对象,a[idx]将调用不是const限定的operator[]()。但是对于定义为const X b的对象,b[idx]将调用operator[](),即const合格。是的,在非const版本中,this具有X * const类型(这会阻止直接分配给this,但允许更改对象this指向)并且在const版本中this具有类型X const * const.
标签: c++ oop operator-overloading