两者区别
- 赋值顺序不同:++ i 是先加后赋值;i ++ 是先赋值后加;++i和i++都是分两步完成的。
- 效率不同:后置++执行速度比前置的慢。
- i++ 不能作为左值,而++i 可以:
int* p1 = &(++i);//正确
// int* p2 = &(i++);//错误
++i = 1;//正确
// i++ = 1;//错误
- 两者都不是原子操作。
为什么++i的执行效率高呢?
这是由于在重载这两者的时候底层实现代码的不同。来看一下这两者的重载过程:
//重载++i
INT INT::operator++()
{
*this = *this+1;
return *this;
}
//重载i++
CONST INT INT::operator++(int)
{
INT oldValue=*this; //保存原来的值
*this = *this+1;
return oldValue;
}
由此可见,在后置++的过程中,建立了一个临时对象来保存原来的值。因此++i的效率要比i++高一些。