我有一个模板类数组:
template <class T=int, int SIZE=10>
class Array {
T TheArray[SIZE];
public:
void Initialize() {
for (int idx=0; idx < SIZE; idx++) {
TheArray[idx] = T();
}
}
T& operator [](int idx) {
return TheArray[idx];
}
T operator [](int idx) const {
return TheArray[idx];
}
}
我有一些关于运营商的问题[]
重载(我在网上找到了这个例子)。
我明白那个T& operator [](int idx)
返回对带有索引的数组值的引用idx
然后T operator [](int idx) const
返回它的值。
但是,我不确定在哪种情况下将通过使用返回引用或值[]
操作员。
另外,如果我改变T operator [](int idx) const
-> T operator [](int idx)
,编译器抱怨。这是为什么?
我可以理解编译器会抱怨,因为只有返回类型不同,但为什么它不抱怨const
被添加?这仅意味着类内部没有被修改,对吧?
我尝试调试这个小的主要实现:
int main() {
int val;
Array<> intArray;
intArray.Initialize();
val = intArray[1];
printf("%d", intArray[1]);
intArray[1] = 5;
}
而每次T& operator [](int idx)
叫做。为什么?
提前致谢。
The operator[]
过载将根据选择const
-您调用它的对象的资格。
Array<> intArray;
intArray[1]; //calls T& operator[]
const Array<> constArray;
constArray[1]; //calls T operator[]
如果您删除const
from T operator[]
,你会得到一个错误,因为成员函数不能具有相同的const
-资格和参数,因为无法在它们之间进行选择。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)