C/C++语言 ++i 与 i++ 区别

记忆小技巧,看 ++ 的位置,如果 ++ 在前,就是先自加,再赋值,如果 ++ 在后,就是先赋值再自加。

#include<stdio.h>
int main()
{
    int i = 0;
    int j = ++i;    
    printf("i=%d\tj=%d\n", i, j);    
    return 0;
}

此时输出 i=1 j=1

#include<stdio.h>
int main()
{
    int i = 0;
    int j = i++;
    printf("i=%d\tj=%d\n", i, j);
    return 0;
}

此时输出 i=1 j=0

参考链接:https://blog.youkuaiyun.com/L_J_Kin/article/details/124579197

1、 i++ 返回原来的值,++i 返回加1后的值。

2、 i++ 不能作为左值,而++i 可以。

https://www.zhihu.com/question/19811087/answer/80210083

### C/C++ 中前置自增 `++i` 和后置自增 `i++` 的区别 在 C/C++ 编程语言中,前置自增 (`++i`) 和后置自增 (`i++`) 是两种不同的自增操作方式。 #### 运算顺序差异 前置自增 `++i` 会先对变量执行加一的操作,然后再使用更新后的值参后续计算[^2]。相反,后置自增 `i++` 则是在当前表达式中使用原始值之后再进行加一处理。 #### 性能考量 由于实现机制的不同,前置自增通常具有更高的性能表现。具体来说,当应用于复杂对象如迭代器或其他模板类实例时,采用前缀形式能够避免创建不必要的临时副本,从而提高运行效率[^1]。 #### 返回值特性 前置自增返回的是经过增量修改后的左值(lvalue),这意味着可以直接对其进行赋值等进一步操作;而后置版本则提供了一个基于原有状态复制出来的右值(rvalue),该值仅能在读取场景下发挥作用而不支持写入动作[^4]。 ```cpp // 前置自增示例 int a = 0; ++a; // 此处a变为1并立即生效 // 后置自增示例 int b = 0; b++; // 表达式的值仍为0,但在语句结束时b已变成1 ``` 为了更直观地理解两者之间的差别,下面给出一段简单的代码片段: ```cpp #include <iostream> using namespace std; class Counter { public: int value; Counter(int v): value(v) {} // Overload prefix increment operator Counter& operator++() { ++value; return *this; } // Overload postfix increment operator Counter operator++(int) { Counter temp(*this); ++(*this); return temp; } }; void print(const char* msg, const Counter& c){ cout << msg << ": " << c.value << endl; } int main(){ Counter counter(5); print("Before any operation", counter); print("Prefix Increment result", ++counter); print("After Prefix Increment", counter); Counter anotherCounter(7); print("Another Before any operation", anotherCounter); print("Postfix Increment result", anotherCounter++); print("After Postfix Increment", anotherCounter); } ``` 上述程序展示了如何通过重载运算符来区分这两种不同类型的自增行为,并且可以看到它们各自产生的效果。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值