【发布时间】:2013-10-14 18:26:44
【问题描述】:
我有一个我很困惑的话题,我需要详细说明一下。它是一个 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]。
感谢您的帮助。
【问题讨论】:
-
你可以很容易地检查其中的输出调用了哪个。
-
它在演讲幻灯片中,所以我希望我不必创建一个类来使用它们,而只是有人帮助我理解我们为什么这样做
-
别偷懒,自己试一试,你会记得更清楚。
-
我假设 const 版本仅在
a[2]上调用,因为我们不想冒险修改a[0]或a[1]。 这没有任何意义,操作a[2]不涉及a[0]或a[1],它涉及a和整数文字2。 -
我发现这个视频很有帮助:youtube.com/watch?v=4fJBrditnJU。直接跳到 8:15
标签: c++ operator-overloading constants