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
相关产品推荐
相关产品推荐

