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

C++标准是否规定函数副作用先于求值?代码行为是否未定义?

问题解答

关于C++标准中函数副作用的排序规则

C++标准明确规定:函数调用过程中产生的所有副作用,都会在该函数的返回值被用于表达式后续计算之前完成排序。也就是说,函数体内部的操作(包括对变量的修改等副作用),一定会在函数返回值被读取、使用前全部执行完毕。

对示例代码的分析

先看给出的代码:

int x;
int f() { return x++; }
void g() { x = f(); }

当调用g()时,执行x = f()的过程是:

  1. 先调用f(),f()里的x++会先返回当前x的值,然后对x执行自增(这是副作用);
  2. 等f()的所有操作(包括自增的副作用)完成后,再把f()的返回值赋值给x。

相当于执行了“读取x的值 → x自增1 → 把之前读取的x值重新赋值给x”,所以最终x的值保持不变,这个行为是定义良好的,不属于未定义行为。你在不同平台和编译参数下得到一致结果,正是因为这是标准规定的确定行为。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 17:34:53