它们两个的数值变化的区别,我这里就不多说了
这里主要说明两者在效率上的区别
(1)首先如果是自带的数据类型,比如int型,++i和i++,编译器的实现方式是相同的,两者并没有效率上的区别,虽然也有副本的开销,但是一般编译器会优化。
(2)如果是自定义的数据类型,比如自己定义的类。这个时候两者就有了区别
++i,可以返回对象的引用,而i++必须产生一个临时对象保存更改前对象的值并返回(实现过自定义类型++运算符定义的就知道),所以导致在大对象的时候产生了较大的复制开销,引起效率降低,因此处理使用者自定义类型(注意不是指内建类型)的时候,应该尽可能的使用前缀式地增/递减
A& A::operator++();//++A
const A A::operator++(int);//A++,返回对象,调用拷贝构造函数
所以++A效率更高些。