Скажите, пожалуйста, как оператор -> () определяется для итератора std :: list, чтобы ссылаться на элементы элемента, на который указывает итератор.
EDIT:
Проблема в том, что если вы реализуете так (Фред Нурк):
template<class T>
struct list {
private:
struct Node { // internal class that actually makes up the list structure
Node *prev, *next;
T data;
};
public:
struct iterator { // iterator interface to the above internal node type
T* operator->() const {
return &_node->data;
}
private:
Node *_node;
}
};
Тогда, когда вы пишете:
struct A {
int n;
};
void f() {
list<A> L; // imagine this is filled with some data
list<A>::iterator x = L.begin();
x->n = 42;
}
Тогда
x-> n Я понимаю, как x-> operator -> () n, который эквивалентен (Понятно a) n, который является неявностью. Как понять эту часть. Некоторые ответы говорят, что это эквивалентно x-> operator -> () -> n; (вместо x-> operator -> () n) но я не понимаю почему. Пожалуйста, объясните мне это.