【发布时间】:2016-04-08 04:34:09
【问题描述】:
我有一个模板类数组:
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++ 为您提供了一个完美的对象初始化工具,它被称为构造函数。
标签: c++ operator-overloading overloading operator-keyword