Я хочу понять ниже код:
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
}
* Не используется для разыменования указателя, this
не является указателем.
@eguneys Но this
является указатель; указатель на объект, для которого вызывается функция-член.
взято из этого кода github.com/LeelaChessZero/lc0/blob/master/src/mcts/node.h#L418