可能重复:
Is there a performance difference between i++ and ++i in C++?
我理解:
i++;
应该采取比
更多的指示++i;
因为它生成了一个您不需要使用的中间结果,所以人们将“++ i”放在对中间结果没有用处的代码行上。
然而,编译器非常聪明,他们可以判断结果是否被使用。他们可以说出各种各样的事情。但它们并不神奇
所以我很好奇 - 在现代编译器上确实选择了另一种实际问题,或者它是否只是简单地编译成相同的机器代码?
答案 0 :(得分:9)
在int
上使用它无关紧要。但是,当使用迭代器或其他重载operator++
的对象时,它可能仍会有所不同。
答案 1 :(得分:2)
这对本机类型没有区别,但可以对用户定义的类型(即类,结构,枚举,...)做一些改动,因为用户可以重载运算符,并且后缀为({{ 1}})有时可能会慢一些。
答案 2 :(得分:1)
在C中,应该没有区别。如果没有使用,编译器足够聪明,可以优化额外的副本。在C ++中,它可以产生巨大的差异,因为如果i
定义的变量可以是分别定义operator++
的前缀和后缀版本的类型,这使得编译器无法删除一般情况下的副本。因此,即使没有使用它,编译器也无法删除副本。
为了保持一致性,我将使用前缀表单,除非您必须使用后缀表单。 (即使我认为后缀形式“更漂亮”)
答案 3 :(得分:1)
Visual C ++似乎在每种情况下输出相同的代码:
i++;
00AB149C mov eax,dword ptr [i]
00AB149F add eax,1
00AB14A2 mov dword ptr [i],eax
++j;
00AB14A5 mov eax,dword ptr [j]
00AB14A8 add eax,1
00AB14AB mov dword ptr [j],eax