【问题标题】:In C++ which is more "EFFICIENT" on non primitive types, A pre increment (++i) or a post increment (i++) [duplicate]在非原始类型上更“高效”的 C++ 中,前增量 (++i) 或后增量 (i++) [重复]
【发布时间】:2012-04-03 02:38:35
【问题描述】:

可能重复:
Is there a performance difference between i++ and ++i in C++?

今天面试,面试官问了我这个问题。

在 C++ 中,非原始类型更“高效”,即前自增 (++i) 或后自增 (i++)。我回答说 Pre increment 但无法给出确切的原因。

我通过互联网搜索,发现Pre increment 更有效。但我无法理解原因。谁能解释一下原因?

例如:

for ( ; c.value() != 21 ; ++c)
or
for ( ; c.value() != 21 ; c++)

【问题讨论】:

标签: c++


【解决方案1】:

pre-increment (++i) 通常更快,因为 post-increment 返回当前值然后递增该值,而 pre-increment 只是递增变量。

在许多情况下,编译器无论如何都会对此进行优化,除非您专门使用后增量来使用当前值并在之后增加该值。

【讨论】:

  • 这个之前已经报道过几百次了。 stackoverflow.com/questions/24886/… stackoverflow.com/questions/24901/… 等。答案是视情况而定,但对于原始类型,它通常完全相同。
  • 因为在发布时您的答案不准确(并非所有情况下,前置增量都比后置增量快)。之后您对其进行了编辑以使其更准确。
  • 也许反对票是因为这个答案传播了一个神话,即后增量在返回值后增加值。后增量在返回之前增加值,但返回旧值。
  • @PreetKukreti:我不是反对者,但一个可能的原因是除了回答一个不应该重新回答的问题(除非有人有新的贡献),你的回答是不正确的.后增量通常对返回原始值和递增值施加排序是不正确的。这样的顺序对于用户定义的运算符来说是必须的,但对于内置的运算符则不是。
猜你喜欢
  • 1970-01-01
  • 2017-08-11
  • 2023-01-14
  • 2017-07-02
  • 2019-07-13
  • 1970-01-01
  • 2014-08-16
  • 2011-07-11
相关资源
最近更新 更多