`operator++(int)` 和 `operator++()`

operator++(int)operator++() 是 C++ 中重载的两个不同的自增运算符函数,它们分别用于后置自增前置自增。它们的区别在于调用方式以及自增行为的不同。

1. 前置自增运算符 operator++()

  • 函数签名: Type& operator++();
  • 调用方式: ++object;
  • 作用: 前置自增运算符首先将对象自增,然后返回自增后的对象本身(通常返回为引用类型,Type&),因此你可以直接在同一个表达式中使用自增后的值。
  • 特点: 前置自增更高效,因为它不需要创建临时对象。

2. 后置自增运算符 operator++(int)

  • 函数签名: Type operator++(int);
  • 调用方式: object++;
  • 作用: 后置自增运算符会先返回对象的原始状态,然后再进行自增。参数 int 并不是用来传递值的,它只是用来区分后置和前置运算符,因此它不需要实际传递参数。
  • 特点: 后置自增通常会创建一个临时对象,保存自增前的值,然后再返回这个临时对象。这使得后置自增比前置自增稍微低效一些,因为涉及到对象的拷贝。

具体的示例代码:

#include <iostream>

class Counter {
private:
    int value;
public:
    Counter(int v) : value(v) {}

    // 前置自增运算符
    Counter& operator++() {
        ++value;  // 先自增
        return *this;  // 返回自增后的对象
    }

    // 后置自增运算符
    Counter operator++(int) {
        Counter temp = *this;  // 保存当前状态
        ++value;  // 自增
        return temp;  // 返回自增前的对象
    }

    int getValue() const {
        return value;
    }
};

int main() {
    Counter c(5);

    // 前置自增
    ++c;  // 先自增,再返回
    std::cout << "After ++c: " << c.getValue() << std::endl;  // 输出6

    // 后置自增
    c++;  // 先返回,再自增
    std::cout << "After c++: " << c.getValue() << std::endl;  // 输出7

    return 0;
}

解释:

  1. 前置自增 (++c):

    • 首先调用 operator++(),该函数立即将 value 自增,然后返回自增后的对象引用。因此,输出显示的是自增后的值。
  2. 后置自增 (c++):

    • 调用 operator++(int) 时,先创建一个临时对象 temp,保存自增前的状态,然后将 value 自增,最后返回自增前的那个临时对象。这就是为什么 c++ 操作返回的是自增前的值。

区别总结:

  • 前置自增 (operator++()): 先自增再返回,通常更高效,尤其是对于复杂对象。
  • 后置自增 (operator++(int)): 先返回原始值,再自增,需要创建临时对象,因此稍微低效。
posted @ 2024-09-27 21:10  牛马chen  阅读(45)  评论(0编辑  收藏  举报