区别一
++i是左值,i++是右值。
区别二
实现代码不同
++i等同于i=i+1,然后返回的是变量i本身,所以是一个左值。
i++是先将i放在一个临时变量中,再执行++i的操作,然后返回临时变量的值,所以是一个右值。
所以i++执行速度会比++i慢一点,它多了一个分配内存并赋值的操作。
区别三
优先级不同
例:
int i[5] = { 1,3,5,7,9 };
int* p1 = i;
int* p2 = i;
int* p3 = i;
//*和前缀++/--优先级相同,以从右到左的方式结合
//先对p1进行递增,指向第二个元素,*用于被递增后的p1,所以输出是3
cout << "*++p1=" << *++p1 << endl;
//先取p2指向的值(第一个元素),再递增,所以输出是2
cout << "++*p2=" << ++*p2 << endl;
//后缀++/--优先级更高
//先对p3递增,指向第二个元素
//后缀运算符意味着虽然递增了,但返回的仍是原先的值
//所以解引得到的仍是第一个元素的值,上一条语句将它改成了2
cout << "*p3++=" << *p3++ << endl;
传送门: