【发布时间】:2018-01-23 20:24:12
【问题描述】:
在输入迭代器 *it++ 上执行此操作是否有效?
我理解代码如下,它取消引用迭代器并给我值,然后向前迈出一步。
在 c++ 参考中,* 运算符低于后缀运算符:http://en.cppreference.com/w/cpp/language/operator_precedence
但我读到这种风格是不好的做法。为什么?
【问题讨论】:
-
因为后缀
++应该记录之前的状态然后自加,所以与前缀++相比还有一些额外的工作要做。这就是为什么建议在foo循环中使用++i的原因。 -
我不认为它被认为是糟糕的风格,这是一个常见的成语。就像
*dest++ = *src++在从一个数组复制到另一个数组的循环中一样。 -
@Barmar 对于指针是的,但长期以来一直倾向于迭代器上的预增量,因为至少对于某些迭代器来说,后增量的成本要高得多。
-
@AlanStokes 这不会跳过第一个元素并尝试取消引用结束吗?
-
@Barmar 您确实需要适当地重写。以
*dest = *src; ++dest; ++src;为例。