我有一个话题不太清楚,需要更详细的解释。它涉及到带有const版本和非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]
或者 a[1]
。
谢谢任何帮助。
a[2]
上调用const版本,因为我们不想冒险修改a[0]
或a[1]
。这毫无意义,操作a[2]
与a[0]
或a[1]
无关,它涉及到的是a
和整数字面量2
。 - Jonathan Wakely