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

C++中std::vector作为函数参数传递:拷贝还是退化为引用?

C++中std::vector的函数传参问题

直接传值的行为

你给出的void myFunc(std::vector<int> myVec)属于传值调用,此时会触发整个std::vector对象的完整拷贝:不仅会复制vector内部的指针、容量、大小这些成员变量,还会把堆上存储的所有元素完整复制一份到新的vector实例中——并不是只传递指针。

只读场景的最优传参选择

如果仅需在函数中读取数据、不修改vector本身,优先使用const引用传递,而非显式传指针,声明方式为:

void myFunc(const std::vector<int>& myVec)

选择引用的原因:

  • 无拷贝开销:引用本质是原对象的别名,底层共享同一块堆内存,几乎没有额外性能损耗;
  • 安全性高:const修饰明确限制了函数对vector的修改权限,避免误操作;
  • 代码简洁:无需像指针那样手动检查空值(指针可能传入nullptr,需要额外判断逻辑)。

不同传参方式的速度差异

  • 传值:开销最大,当vector包含大量元素时,拷贝整个容器的时间和内存成本会急剧上升,严重拖慢性能;
  • const引用/指针:两者性能接近,都几乎没有额外开销,但引用在代码可读性和安全性上更优;指针仅在需要传递空值等特殊场景下才有使用必要。

内容的提问来源于stack exchange,提问作者A. McMount

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 22:50:37