转载:
https://blog.csdn.net/faterman/article/details/26715399
一、含义:
(1) i++ 简单来说就是先用i的值来参加表达式的计算,然后再自加1
i = 4;
a = i++; //此时,先做a=i=4,再做i++,故a=4,i=5
(2) ++i 则是先自增1,再用自加后的值来做运算。
i = 4;
a = ++i; //此时,先做++i=5,再做a=i,故a=5, i=5
二、效率
++i 的效率更高;
i++ (在C++中) 在实现的时候,系统会产生一个 local object class INT的临时变量 用于存储原有的数据供返回值用。
++i 的实现方式
INT INT::operator++()
{
*this = *this +1;
return *this;
}
i++的实现方式
const INT INT::operator++(int)
{
INT oldvalue = *this;
*this = *this+1;
return oldvalue;
}
说明:
1、在不考虑编译器优化的条件下,前缀(++i)比后缀(i++)要少一步开辟临时变量的操作,所以前缀效率更高。
2、对于内置数据类型,由于编译器优化的原因,前缀和后缀的效率没什么差别。
例如:对于 int 型变量,编译器可以优化掉开辟临时变量这份多余的工作。
3、对于自定义的数据类型(类),我们在使用 自增 运算符的时候,需要重载 ++ 运算符,在重载的时候,后缀要开辟一个临时变量,所以前缀的效率要比后缀的更高。