列表的迭代器可以返回非常量引用吗?

Can list's iterator return a non-const reference?

本文关键字:常量 引用 非常 返回 迭代器 列表      更新时间:2023-10-16

我是C++的新手。我需要编写一个使用list的链表类。我已经完成了大部分工作,但我需要一个返回列表中第n个元素的[]运算符。我在大多数情况下都能做到这一点,但在我的测试驱动程序中,我需要比较不同列表中的两个元素。(即l1[n]==l2[m])。这会产生以下编译错误:

error: passing ‘const StrList {aka const TList<std::basic_string<char> >}’ as ‘this’ argument of ‘T& TList<T>::operator[](int) [with T = std::basic_string<char>]’ discards qualifiers [-fpermissive]

我认为这里的问题是[]运算符中迭代器的返回调用返回了一个const引用。(来自[]操作员的返回调用是return(*iter);,其中*iter表示正确的元素。

有没有一种方法可以将对迭代器的引用作为非常量引用返回,或者有没有其他方法可以实现这一点?如果有必要,我可以发布更多的代码。

没有代码很难判断,但考虑到错误,您可能需要operator[]:的const过载

template <typename T>
const T& operator[](std::size_t n) const
{
     ...
}