C ++:重载[]操作用于读取和写入访问(C++: Overloading the [ ] oper

2019-07-04 11:15发布

在一般情况下,你如何申报索引[ ]的读取和写入accesss一类的运营商?

我想是这样

/**
 * Read index operator.
 */
T& operator[](T u);

/**
 * Write index operator
 */
const T& operator[](T u);

它给我的错误

../src/Class.h:44:14: error: 'const T& Class::operator[](T)' cannot be overloaded
../src/Class.h:39:8: error: with 'T& Class::operator[](T)'

Answer 1:

你的可变版本是好的:

T& operator[](T u);

const版本应该是一个const成员函数以及返回一个const参考:

const T& operator[](T u) const;
                         ^^^^^

这不仅从其他重载区别开来,也可以让(只读)访问const的类的实例。 一般地,重载成员函数可以通过它们的参数类型和const /易失性的资格进行区分,而不是通过返回类型。



Answer 2:

您只需有一个会被用于读取和写入一个过载:

T& operator[](int);

说了这么多,你可能还需要有一个const过载:

const T& operator[](int) const;

这将提供只读索引到const类的实例。



Answer 3:

你得到的错误,因为重载函数不能返回类型而不同。 但他们可以通过常量性差异。

/**
 * Write index operator.
 */
T& operator[](T u);

/**
 * Read index operator
 */
const T& operator[](T u) const;

注意“写”和“读”交换了位置。

另外,不要你实际上意味着运营商的说法是一些整型?



文章来源: C++: Overloading the [ ] operator for read and write access