关于list重载->运算符的疑惑
这个是《stl源码剖析》里的截图,前2张图是list迭代器的实现代码,第3张是list的结构图,我想问的是:
1、第1张图,红色框框柱的第2行是不是就是这个迭代器类本身换了个self的名字?那第1行是什么东西?怎么又出来个iterator?
2、第2张图,最下面红色框框柱的operator->()函数居然没有参数,->不应该是双目运算符么,类内默认有个this隐藏了,那还有个右参数怎么不写?
3、第2张图,最下面红色框框柱的operator->()函数为什么返回的是一个指针?返回什么不是看后面接的是data还是next吗?我看->重载的实现是直接调用*的重载然后返回data的地址。这个->运算符和迭代器搭配怎么使用?我下面的代码报错了
程序代码:
#include<iostream> #include<list> using namespace std; int main(){ list<int> ls; ls.push_back(3); ls.push_back(2); auto iter = ls.begin(); cout<<*iter<<endl;//3 cout<<iter->node<<endl;//报错 cout<<iter->node->next<<endl;//报错 cout<<iter->node->data<<endl;//报错 return 0; }
上面3个错都是[Error] request for member 'node' in '* iter.std::_List_iterator<int>::operator->()', which is of non-class type 'int'.
网上不是没有就是搜出来的感觉不是我想要问的,故发此贴,希望大佬解答一下,谢谢!