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

内联函数与函数传值问题:为何main()中实参未被修改?

问题核心:混淆了内联展开与传值参数的本质

你误解了内联函数的作用——内联只是把函数体代码复制到调用位置,完全不会改变参数传递的规则。

先看个实际例子,假设你写了这样的代码:

inline void modify(int val) {
    val = 100;
}

int main() {
    int x = 10;
    modify(x);
    // x还是10,不会变成100
    return 0;
}

当编译器做内联展开后,main里的代码会被替换成类似这样:

int main() {
    int x = 10;
    // 内联展开modify函数的代码
    int val = x; // 传值的本质:创建实参的副本
    val = 100;   // 修改的是副本,和原变量x无关
    return 0;
}

你遗漏的两个关键要点:

  • 内联的唯一目的是消除函数调用的栈开销(比如保存寄存器、跳转指令这些),它不改变任何语法规则,包括参数传递的逻辑。
  • 传值参数的核心是「复制实参的值到形参」,不管函数是不是内联,只要是传值,修改的都是形参副本,永远碰不到原变量。如果想修改原变量,你需要用传引用或者传指针,比如把函数改成inline void modify(int &val),这时候内联展开后才会直接操作原变量x。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 00:55:14