我有一个我很困惑的话题,我需要详细说明。它是 const 版本和非常量版本的运算符重载。
// non-const
double &operator[](int idx) {
if (idx < length && idx >= 0) {
return data[idx];
}
throw BoundsError();
}
我知道这个 lambda 函数需要一个索引并检查它的有效性,然后返回类中数组数据的索引。还有一个具有相同主体但函数调用为的函数
const double &operator[](int idx) const
为什么我们需要两个版本?
例如,在下面的示例代码中,下面的每个实例使用的是哪个版本?
Array a(3);
a[0] = 2.0;
a[1] = 3.3;
a[2] = a[0] + a[1];
我的假设是 const 版本仅被调用是a[2]
因为我们不想冒险修改a[0]
or a[1]
。
谢谢你的帮助。