两者区别

  • 赋值顺序不同:++ 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++高一些。