为什么operator->在C++ STL库中由operator*实现?

Joh*_*evo 3 c++ stl

我读了std::deque源代码,我找到了以下的实现_deque_iterator::operator->_deque_iterator::operator*

reference operator* const() { return *cur; }
pointer operator-> const(){ return &(operator*()); }
Run Code Online (Sandbox Code Playgroud)

所以我的问题是为什么不只是返回cur指针?像这样:

pointer operator-> const(){ return cur; }
Run Code Online (Sandbox Code Playgroud)

BЈо*_*вић 5

它更灵活.

如果发生变化,您只需在一个地方进行更改即可.如果你回来cur(如你所说,你有两个地方你必须改变.

  • @StilesCrisis,是什么让你认为会慢一点?它们都是内联的,编译器会同时生成相同的代码. (11认同)
  • @StileCrisis:如果这是你制作较少可维护代码的论据,无论多么轻微,我都不会留下深刻印象. (10认同)
  • 我认为一个人比另一个人更易于维护是值得商榷的.如果你正在改变实现以至于"cur"消失了,那么你正在进行重写. (3认同)
  • @StileCrisis:对于你的研究,这里的一般原则叫做"不要重复自己"(DRY). (2认同)
  • 对于STL,我希望实现精简高效.我不在乎实现者是否需要努力工作才能做到这一点.对于普通人的代码,我同意你的优先事项,但我非常重视图书馆的不同品质,这种品质无处不在且普遍存在.STL编译速度很快.STL在调试方面不是愚蠢无效的.没关系,我愿意同意不同意这一点.你的观点确实有价值. (2认同)