永发信息网

下标操作符重载问题

答案:1  悬赏:10  手机版
解决时间 2021-03-28 19:58
  • 提问者网友:贪了杯
  • 2021-03-28 00:57
下标操作符重载问题
最佳答案
  • 五星知识达人网友:迷人又混蛋
  • 2021-03-28 01:21
确实是重载了。
举个例子:
class Foo {
public:
int &operator[] (const size_t); // 1
const int &operator[] (const size_t) const; // 2
// ...
};
依据主要可以分为以下几条:
1. 非const成员将调用1版本,返回引用可以作为左值。 const成员调用2版本,不能为左值。
2. 成员函数的定义中省却了隐含的this形参,那么版本1其实是
int &operator[] ( Foo *const this, const size_t)。this是一个const指针,但指向非const对象。
版本2其实是
const int &operator[] ( const Foo *const this, const size_t) const。this是一个指向const对象的const指针,为什么多了指向const对象,因为版本2声明中最后的那个const的意义。也许会问了,只是多了一个const,不会重定义,那么依据3.
3. 形参和const形参的等价性仅仅适用于非引用形参,而指针和引用的const版本和非const版本是不等价的。比如说另外定义非成员函数void f(Foo a)和void f(const Foo a)是等价的,而上述重载[]版本明确表明了非等价性。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯