我想了解以下代码:

class EdgeIterator {

  EdgeIterator() {}

  EdgeIterator(const EdgeList edges) {}

  EdgeIterator begin() { return *this; }


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

}

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

最佳答案

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]

10-08 12:09