我有一个模板类Array:
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)
,为什么会这样?谢谢。
initialize
这样的函数。C++ 为对象初始化提供了一个完美的工具,那就是构造函数。 - SergeyA