You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C/C++中使用复合赋值的真正优势是什么?

为什么C/C++中普通赋值语句里的表达式会被求值两次?

嘿,这个问题问得很关键!咱们结合你给出的代码例子来拆解,就能把这个问题说清楚:

#include <stdio.h>
int main() {
 int exp1=20;
 int b=10;
 // 普通赋值语句
 // exp1=exp1+b;
 // 复合赋值语句
 exp1+=b;
 return 0;
};

咱们先聚焦被注释掉的普通赋值语句 exp1 = exp1 + b;:

  • 第一次求值:右边的exp1。编译器需要先定位到exp1的内存地址,读取它当前存储的数值(也就是20),这是对exp1的第一次求值操作。
  • 第二次求值:左边的exp1。当计算完exp1 + b得到新值(30)后,编译器需要再次定位到exp1的内存地址,把新值写入进去,这就是对exp1的第二次求值操作。

而复合赋值语句exp1 += b;的逻辑就简洁很多:编译器只需要定位一次exp1的内存地址,先读出当前值完成加法计算,紧接着就把新值写回同一个地址——全程exp1只被求值一次。

这里还要提个关键点:如果exp1是带有副作用的表达式(比如arr[++i]这种),两种赋值方式的差异会直接导致逻辑错误。普通赋值会让i自增两次,而复合赋值只会自增一次,这也是复合赋值在这类场景下更安全的原因。

内容的提问来源于stack exchange,提问作者Rajesh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:59:38