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

C++方法参数中const与引用的使用时机及getSum示例疑问

C++中getSum不同参数形式的详细解析

嘿,我来帮你把这几个getSum函数的参数区别掰扯清楚,你的初步理解方向是对的,我再给你拆解得更明白些:

  • int getSum1(int, int);
    你说的完全没错!调用这个函数时,传入的两个整数会被复制一份到函数的参数中。因为int是非常小的值类型,复制的开销几乎可以忽略不计,所以这种写法简单又直接。而且因为操作的是副本,就算你在函数里不小心修改了参数值,也不会影响到外面的原始变量,安全性拉满。

  • int getSum2(int&, int&);
    这里用的是非const引用,意味着函数直接操作传入的原始变量(引用本质就是变量的别名)。但问题是,getSum只是要计算两个数的和,根本不需要修改输入的数值啊!用非const引用完全是画蛇添足,甚至有风险——万一你在函数里误改了参数,外面的变量就跟着变了,完全违背了这个函数“只求和”的设计初衷。这种写法在这个场景下绝对是不合理的,别用。

  • int getSum3(const int, const int);
    这里的const是用来约束函数内部的参数副本,意思是“在函数里不能修改这两个参数副本的值”。不过对于int这种传值的参数来说,加不加const实际影响不大——毕竟本来就是副本,改了也不会影响外面的变量。但加const可以起到自我约束的作用,防止你在函数里误操作参数,算是一种代码规范层面的小优化,但性能和功能上和getSum1没区别。

  • int getSum4(const int&, const int&);
    这是const引用,它的核心作用是:既避免了复制(直接引用原始变量),又通过const保证函数里不能修改原始变量。不过对于int这种小类型来说,复制的开销反而比引用的开销更小(因为引用底层其实是指针,还要额外的间接访问),所以用const引用反而有点多余。但如果参数是大类型(比如自定义的大型结构体、std::string这类),const引用就非常有用了——既能避免昂贵的复制开销,又能保证数据安全,这时候就是最优选择。

总结建议

  • 如果是像int、char这种小值类型,优先用getSum1的传值写法,简单高效。
  • 如果是大型自定义类型、容器类(比如std::vector、std::string),优先用getSum4的const引用写法,兼顾性能和安全。
  • getSum2的非const引用在求和场景下完全没必要,别用;getSum3的const传值聊胜于无,规范上可以加,但不是必须。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:29:09