c++中++i和i++哪个更高效

我们知道++i和i++是有区别的

#include
using namespace std;
int main()
{
    int a = 0;
    int b = 0;
    int c = ++a;
    int d = b++;
    cout << "c = " << c << endl;
    cout << "d = " << d << endl;
    return 0;
}

输出结果:
c=1
d=0
那么++i和i++哪个更高效呢?

如果前面的变量类型是c++自带的类型,执行效率是一样的(有兴趣可以用gdb查看汇编代码)
如果变量是我们自定的数据类型,++i效率高于i++
详细的您可以参考:
https://www.bbsmax.com/A/kjdwYg9EJN/

 ++i的效率高些,++i在运算过程中不产生临时对象,返回的就是i,是个左值,类似++i=1这样的表达式是合法的,而i++在运算的过程中会产生临时对象,返回的是零时对象的值,是个右值,像i++=1这样的表达式是非法的
对于内置类型,单独的i++++i语句,现在的编译器基本上都会优化成++i,所以就没什么区别。
    考虑内建数据类型时,它们的效率差别不大(去除编译器优化的影响)。所以在这种情况下我们大可不必关心。
现在让我们再考虑自定义数据类型(主要是指类)的情况。此时我们不需要再做很多汇编代码的分析了,因为前缀式(++i)可以返回对象的引用,而后缀式(i++)必须产生一个临时对象保存更改前对象的值并返回(实现过自定义类型++运算符定义的就知道),所以导致在大对象的时候产生了较大的复制开销,引起效率降低,因此处理使用者自定义类型(注意不是指内建类型)的时候,应该尽可能的使用前缀式地增/递减,因为他天生体质较佳。

内建数据类型的情况,效率没有区别。
自定义数据类型的情况,++i效率较高。

不管后自增tmp=i++还是前自增tmp=++i都是2个步骤:tmp=i++等同于:

tmp=i;
i=i+1;

前自增tmp=++i等同于:

i=i+1;
tmp=i;

由以上2个等同于的式子,你可以看出如果是求tmp,那在计算机内可能是i++更先一步,因为它是先赋值再自增。
如果是求i本身的结果,可能是++i更先一步,因为它是先自增,再赋值给tmp。
不过不建议这样比较,因为它们都是两步。

该回答引用ChatGPT
在 C++ 中,++i 和 i++ 的效率差异通常很小,如果存在差异,那么这种差异可以被编译器优化掉。因此,选择 ++i 还是 i++ 并不影响程序的效率。

更重要的是,选择 ++i 还是 i++ 更多是一个代码风格问题,它取决于程序员的习惯和编程风格。对于程序员而言,选择适合自己风格的方式并使用一致的风格是更重要的。

前置++

add     DWORD PTR [rbp-4], 1
mov     eax, DWORD PTR [rbp-4]
mov     DWORD PTR [rbp-12], eax

后置++

mov     eax, DWORD PTR [rbp-8]
lea     edx, [rax+1]
mov     DWORD PTR [rbp-8], edx
mov     DWORD PTR [rbp-16], eax

可见,在你给出的这段代码中,前置++指令更少。
但是,得到的结果不同,就无法比较所谓高效!


在前置和后置++单独成句时,生成指令相同。