C++ 什么';It’在处理迭代器时,使用以下命令的好处是什么

C++ 什么';It’在处理迭代器时,使用以下命令的好处是什么,c++,visual-c++,C++,Visual C++,对于迭代器,我看到了一些代码的使用 (*iterator).first 但我想我可以用以下方法 iterator->first 互相使用有什么好处?哪个更好?使用这两种语句都没有好处,它们都将编译成完全相同的机器代码 然而,我想说第二个稍微清晰一些,但这只是个人偏好。当你有几个指针指向彼此,而最后一个指针指向你需要的对象时,第二个指针(作为语法)的优点可能会被强调。 代码p1->p2->obj比(*(*p1.p2).obj更清晰。想象一下,当您有3个或更多指针时,执行引用。它也是出现语

对于迭代器,我看到了一些代码的使用

(*iterator).first
但我想我可以用以下方法

iterator->first

互相使用有什么好处?哪个更好?

使用这两种语句都没有好处,它们都将编译成完全相同的机器代码


然而,我想说第二个稍微清晰一些,但这只是个人偏好。

当你有几个指针指向彼此,而最后一个指针指向你需要的对象时,第二个指针(作为语法)的优点可能会被强调。 代码
p1->p2->obj
(*(*p1.p2).obj
更清晰。想象一下,当您有3个或更多指针时,执行引用。它也是出现语法错误的最佳场所。 如果有人(甚至是你)读了你的代码,当你使用
->
操作符编写代码时,你所做的事情就会很清楚

可读性


第二个(对我来说)更具可读性。

它们是等价的。但是考虑向量的向量上的迭代器。例如,如果您想访问元素的
操作符[]
,它在语法上会略有不同<代码>(*it)[0]vs
it->operator[](0)
。前者看起来有点奇怪。@jrok我认为这两种语法都不是完全“怪异自由”:@JoachimIsaksson它可能更糟糕
It.operator*().operator[](0)
:)我的意思是说“后者”,而不是“前者”。考虑到数组运算符,前者更好,是吗?我想说得更清楚一些。正如jrok在评论中指出的那样,除非涉及重载运算符,否则我不会通过第一个表单。