i++ 与 ++i

i++:先运算,后自增
++i : 先自增,后运算
一个分号,代表一条语句执行完毕

<script>
    var a = 10,b = 20,c= 30;
    ++a; //先自增1为11
    a++; //因为分号是一个语句结束,所以这句结束自增1 即 a=12
    e = ++a + (++b) + (c++) + a++;//13 + 21 + 30 + 13前面的++a已经让a变成13了,所以最后一个a是13
    alert(e);//77
</script>
### C/C++ 中 `i++` 和 `++i` 的区别及工作原理 #### 前置和后置运算符的行为差异 在 C/C++ 编程语言中,前置 (`++i`) 和后置 (`i++`) 运算符用于对变量进行量操作。两者的主要区别在于何时更新变量的值以及返回什么值。 对于后置形式 `i++`,其行为分为两部分: - 返回当前未修改前的 `i` 值; - 对原始变量 `i` 执行加一操作[^1]。 具体来说,在遇到表达式 `i++` 时,编译器实际上执行的是如下逻辑: ```cpp int temp = i; i = i + 1; return temp; ``` 此相反,前置版本 `++i` 则直接加并立即应用新值给原变量,随后返回已更新后的结果作为左值[^2]。这意味着它不会创建额外的副本来保存旧状态,因此通常被认为更高效一些[^3]。 #### 实现细节效率考量 当涉及到类对象而非基本数据类型的整数时,上述两种方式的具体实现可以通过重载成员函数的方式体现出来。例如,在定义了一个名为 `MyInt` 的类之后,可以分别通过 `operator++()` 来处理前置情况,而用带有参数的形式如 `operator++(int)` 表达后置情形。 由于前置递不需要保留原有数值的一个副本来供后续使用,所以在某些情况下确实可能带来性能上的优势——尤其是在涉及复杂的数据结构或大型对象的时候。这是因为减少了不必要的内存分配和拷贝过程。 ```cpp class MyInt { public: // 构造函数和其他方法... // 前置++ MyInt& operator++() { value_ += 1; return *this; // 返回引用以便链式调用 } // 后置++, 参数 'int' 只是为了区分重载的方法签名 MyInt operator++(int) { MyInt oldValue(*this); // 创建临时对象存储之前的值 ++(*this); // 使用前置++改变当前实例的状态 return oldValue; // 返回之前保存的老值 } }; ``` 综上所述,虽然这两种语法看起来相似,但在实际编程实践中却有着不同的语义含义和技术特性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值