C++中前置++和后置++的区别

在 C++ 中,前置 ++ 和后置 ++ 的主要区别如下(以下内容同样适用于--):

语法和返回值

前置 ++(Prefix increment)

1
++variable
  • 先递增,后返回值
  • 返回引用:返回递增后的对象本身

后置 ++(Postfix increment)

1
variable++
  • 先返回值,后递增
  • 返回副本:返回递增前的对象副本

性能差异

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class MyInt {
int value;
public:
// 前置++:效率更高
MyInt& operator++() {
++value;
return *this;
}

// 后置++:需要创建临时对象
MyInt operator++(int) { // int 是哑元参数,用于区分
MyInt temp = *this; // 保存原值
++value; // 递增
return temp; // 返回原值的副本
}
};

使用示例

1
2
3
4
5
6
7
8
int a = 5;
int b = 5;

// 前置++
int x = ++a; // a=6, x=6

// 后置++
int y = b++; // b=6, y=5

推荐用法

  • 优先使用前置 ++:性能更好,不需要创建临时对象
  • 在循环中尤其重要:
    1
    2
    for (int i = 0; i < n; ++i)  // 推荐:前置++
    for (int i = 0; i < n; i++) // 可用:后置++

关键区别总结

特性 前置 ++ 后置 ++
操作顺序 先递增后使用 先使用后递增
返回值 对象本身(引用) 原值副本(临时对象)
性能 更高 较低(有拷贝开销)
适用场景 大多数情况 需要原值参与运算时