间接运算符如何返回带有运算符重载的指针地址

时间:2019-06-14 09:45:19

标签: c++

我想了解以下代码:

class EdgeIterator {

  EdgeIterator() {}

  EdgeIterator(const EdgeList edges) {}

  EdgeIterator begin() { return *this; }


  EdgeIterator& operator*() { return *this; }

}

begin函数中return *this如何返回和EdgeIterator  并在operator*函数中返回EdgeIterator&

1 个答案:

答案 0 :(得分:1)

begin()按值返回,因此它返回*this的副本。

operator*()通过引用返回,因此它返回对*this的引用。

这里有类似的代码,可以提供更好的解释:

struct X
{
  std::string a;
  X copy() { return *this; }
  X& ref() { return *this; }
};

int main()
{
  X x{"Hi"};
  x.copy().a = "Bye";
  std::cout << x.a << '\n'; // prints Hi
  x.ref().a = "Bye";
  std::cout << x.a << '\n'; // prints Bye
}

[Live example]