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 ¤t_link->value;
}
您当然需要一个常量版本的迭代器,它基本上与第一个迭代器相同,使用
const
版本的“去引用”运算符。您也可以通过地址返回。编写a->b
比(*a)更容易。b
:
T* operator->() {
return ¤t_link->value;
}
您肯定需要一个常量版本的迭代器,它将基本上与第一个迭代器做相同的事情,使用
const
版本的“去引用”运算符。我认为这是正确的语法。你能解释一下你遇到了什么问题吗?你有错误吗?什么东西没有按预期工作?您可能希望通过引用和/或常量引用来完成。在列表中复制T肯定会导致以后的wtf isms,因为您可能希望返回一个引用,以便可以使用迭代器修改该值(例如,*it=which
)。除此之外,您遇到了什么问题?这也包含在众多运算符重载建议之一中。寻找“指针式类型的运算符”,迭代器就是其中之一。在我看来,这是正确的语法。你能解释一下你遇到了什么问题吗?你有错误吗?什么东西没有按预期工作?您可能希望通过引用和/或常量引用来完成。在列表中复制T肯定会导致以后的wtf isms,因为您可能希望返回一个引用,以便可以使用迭代器修改该值(例如,*it=which
)。除此之外,您遇到了什么问题?这也包含在众多运算符重载建议之一中。寻找“指针类型的运算符”,迭代器就是其中之一。