c++中++i和i++的区别_C++前置与后置自增运算区别

前置++返回加1后的引用,后置++返回加1前的副本;前者效率更高,尤其在类类型中,故循环等场景推荐使用++i。

在C++中,++i(前置自增)和i++(后置自增)虽然都使变量的值加1,但它们在表达式中的行为有本质区别。

返回值不同

这是两者最核心的区别:

  • ++i:先将变量 i 加1,然后返回加1后的值(即引用或新值)。
  • i++:先保存 i 的当前值作为返回值,再将 i 加1,最后返回的是加1之前的旧值。

示例代码:

int i = 5;
int a = ++i; // i 先变为6,a得到6
int b = i++; // b得到6,然后i变为7

最终结果:a=6, b=6, i=7

性能差异(尤其对复杂对象)

对于基本类型(如int),编译器通常会优化掉性能差异。但在类类型(如迭代器)中,这种差别更明显:

  • 前置++:一般返回对象本身,不产生临时对象。
  • 后置++:需要保存原始状态,通常通过创建临时对象实现,效率较低。

因此,在不需要旧值的场景下(比如循环中),推荐使用 ++i,特别是在STL迭代器操作中。

如何重载这两个运算符

在自定义类中,为了区分前置和后置版本,C++规定:

  • 前置++:声明为 T& operator++();
  • 后置++:需带一个int哑元参数,声明为 T operator++(int);

例如:

class Counter {
   int value;
public:
   Counter& operator++() {
      ++value;
      return *this;
   }
   Counter operator++(int) {
      Counter old = *this;
      ++value;
      return old;
   }
};

基本上就这些。理解清楚返回时机和性能影响,就能正确选择使用哪种形式。