gpt4 book ai didi

c++ - 常量和非常量运算符重载

转载 作者:IT老高 更新时间:2023-10-28 21:35:31 24 4
gpt4 key购买 nike

我有一个我很困惑的话题,我需要详细说明。它是一个 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 对象调用 const 版本,调用非 const 版本对于非 const 对象。就是这样。

在您的代码示例中,a 是一个非const 对象,这意味着在所有情况下都会调用非const 版本。 const 版本在您的示例中从不调用。

拥有两个版本的目的是为非const 对象实现“读/写”访问,而对const 对象仅实现“读”访问。 const 对象的 const 版本的 operator [] 被调用,它返回一个 const double & 引用。您可以通过该 const 引用读取数据,但不能通过它进行写入。

关于c++ - 常量和非常量运算符重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19237411/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com