C++ 如何重载解引用操作符?

C++ 如何重载解引用操作符?,c++,class,C++,Class,如何重载解引用操作符?声明会是什么样子?我正在创建一个列表类,但是我在使用解引用操作符时遇到了问题 下面是我重载取消引用操作符的函数 template <typename T> T List_Iterator<T>::operator *(){ return current_link->value; } 您应该返回引用,而不是副本: T& List_Iterator<T>::operator *() { .... } T&List_迭

如何重载解引用操作符?声明会是什么样子?我正在创建一个列表类,但是我在使用解引用操作符时遇到了问题

下面是我重载取消引用操作符的函数

template <typename T>
T List_Iterator<T>::operator *(){
    return current_link->value;
}

您应该返回引用,而不是副本:

T& List_Iterator<T>::operator *() { .... }
T&List_迭代器::运算符*(){..}

否则语义就会混淆:您不能修改正在“取消引用”的对象。

您应该返回引用,而不是副本:

T& List_Iterator<T>::operator *() { .... }
T&List_迭代器::运算符*(){..}

否则语义就会混淆:您无法修改正在“取消引用”的对象。

您也可以按地址返回。编写
a->b
(*a)更容易。b

T* operator->() {
    return &current_link->value;
}

您当然需要一个常量版本的迭代器,它基本上与第一个迭代器相同,使用
const
版本的“去引用”运算符。

您也可以通过地址返回。编写
a->b
(*a)更容易。b

T* operator->() {
    return &current_link->value;
}

您肯定需要一个常量版本的迭代器,它将基本上与第一个迭代器做相同的事情,使用
const
版本的“去引用”运算符。

我认为这是正确的语法。你能解释一下你遇到了什么问题吗?你有错误吗?什么东西没有按预期工作?您可能希望通过引用和/或常量引用来完成。在列表中复制T肯定会导致以后的wtf isms,因为您可能希望返回一个引用,以便可以使用迭代器修改该值(例如,
*it=which
)。除此之外,您遇到了什么问题?这也包含在众多运算符重载建议之一中。寻找“指针式类型的运算符”,迭代器就是其中之一。在我看来,这是正确的语法。你能解释一下你遇到了什么问题吗?你有错误吗?什么东西没有按预期工作?您可能希望通过引用和/或常量引用来完成。在列表中复制T肯定会导致以后的wtf isms,因为您可能希望返回一个引用,以便可以使用迭代器修改该值(例如,
*it=which
)。除此之外,您遇到了什么问题?这也包含在众多运算符重载建议之一中。寻找“指针类型的运算符”,迭代器就是其中之一。