我得到了一个实现模板数组类的赋值。 其中一个要求是重载[]运算符。 我制作了这两个const和非const版本,似乎工作正常。
const T& operator[](const unsigned int index)const
和
T& operator[](const unsigned int index)
我的问题是编译器将如何知道运行哪一个 什么时候我会做的事情:
int i=arr[1]
在非const数组上?
答案 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版本。