2

I got an assignment to implement a template array class. One of the requirement is to overload the [] operator. I made this two const and non-const version which seems to be working fine.

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

and

T& operator[](const unsigned int index)

My question is how will the compiler know which one to run when i will do something like:

int i=arr[1]

On a non-const array?

4

2 回答 2

10

非常量函数将始终在非常量数组上调用,而常量函数将在常量数组上调用。

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

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

于 2013-06-05T19:56:00.507 回答
2

这完全取决于您对对象的声明。如果你有

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

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

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

然后将调用非常量版本。因此,在您给出的示例中,由于它是一个非常量数组,因此将调用非常量版本。

于 2013-06-05T19:54:25.930 回答