数组运算符[]重载const和非const版本

时间:2013-06-05 19:48:43

标签: c++ operator-overloading const

我得到了一个实现模板数组类的赋值。 其中一个要求是重载[]运算符。 我制作了这两个const和非const版本,似乎工作正常。

const T& operator[](const unsigned int index)const

T& operator[](const unsigned int index)

我的问题是编译器将如何知道运行哪一个 什么时候我会做的事情:

int i=arr[1]

在非const数组上?

2 个答案:

答案 0 :(得分:8)

非const函数将始终在非const数组上调用,const函数在const数组上调用。

当您有两个具有相同名称的方法时,编译器会根据参数的类型和隐式对象参数(arr)的类型选择最合适的方法。

前几天我刚回答了一个类似的问题,你可能会发现它有用:https://stackoverflow.com/a/16922652/2387403

答案 1 :(得分:1)

这一切都取决于你对象的声明。如果你有

const T arr[];
...
int i=arr[1];

然后将调用const版本,但如果你有

T arr[];
...
int i=arr[1];

然后将调用非const版本。所以在你给出的例子中,因为它是一个非const数组,所以将调用非const版本。