gpt4 book ai didi

C++ 错误 : operator[] cannot be overloaded

转载 作者:搜寻专家 更新时间:2023-10-31 00:12:03 25 4
gpt4 key购买 nike

我正在学习 C++ 并学习 Vandevoorde 和 Josuttis 的 C++ 模板的第 18 章。我重新输入了他们的表达式模板代码,但以下内容产生了错误

sarray1.cpp:36:6: error: ‘T& SArray<T>::operator[](size_t) const’ cannot be overloaded
T& operator[] (size_t idx) const {
^
sarray1.cpp:32:5: error: with ‘T SArray<T>::operator[](size_t) const’
T operator[] (size_t idx) const {

代码如下:

template <typename T>
class SArray {

public:

...

T operator[] (size_t idx) const {
return storage[idx];
}

T& operator[] (size_t idx) const {
return storage[idx];
}
...
};

我刚刚学习 C++,所以我没有看到仅返回类型不同的重载函数的实例,但我看到这确实完成了:Overload a C++ function according to the return value .我还看到 [] 不在 list of operators that cannot be overloaded 上在 C++ 中。我想不出还有什么问题。出现上述错误的原因是什么?

最佳答案

您在重新输入第 323 页的代码时犯了一个错误。只有第一个重载应该是 const , 而第二个应该是非 const :

T operator[] (size_t idx) const {
return storage[idx];
}

T& operator[] (size_t idx) { // <<== No const here
return storage[idx];
}

此代码试图说明的要点是您可以在 const 上重载运算符-性 this目的。 C++ 将从上下文中找出它应该调用两个运算符中的哪一个,然后在 SArray 时返回一个引用。是非常量,或者当数组为 const 时返回一个拷贝.

关于C++ 错误 : operator[] cannot be overloaded,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31657873/

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