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

非原生类型函数参数尽可能使用const引用是否真的具备优势?

非原生类型函数参数用const &:必要实践还是无意义微优化?

编译器优化靠不住

别指望编译器能自动把所有传值改成传引用——C++的类型系统不允许编译器随意修改函数签名的传递方式。虽然有复制省略、RVO这类优化,但它们只在特定场景生效:

  • 如果你传的是临时对象,编译器可能省略拷贝,但如果传的是命名变量,几乎不会自动改成传引用,因为这会破坏函数调用的语义约定
  • 遇到不可复制/移动的类型(比如禁用拷贝构造的类),传值直接编译失败,根本轮不到优化

这些场景必须用const &

  • 大型类型:比如包含大数组、动态内存的结构体/类,传值的拷贝成本极高,哪怕编译器想优化也无能为力,const &直接跳过拷贝,性能收益实打实
  • 不可复制类型:像std::unique_ptr这种只能移动的类型,传值会直接转移所有权,要是你只是读内容,const &是唯一安全的选择
  • 有复杂构造的类:哪怕编译器能优化掉拷贝,代码语义上还是存在构造/析构的逻辑,const &明确告诉所有人:这个参数不会被拷贝,也不会被修改

可读性的权衡

不是所有场景都要硬套const &:

  • 小型类型:比如只有两三个int的小结构体,传值的拷贝成本和传引用几乎没差(甚至可能更快,不用解引用地址),这时候直接传值,代码更清爽
  • 语义明确性优先:const &本身是一种语义声明,比传值更清晰地表达“我只是读取这个参数,不会修改也不会拷贝”的意图,长期来看,这种明确性反而提升可读性,而不是增加复杂度
  • 团队规范优先:如果团队统一要求非原生类型用const &,跟着规范走就行,一致性比个人偏好更重要

结论

这不是无意义的微优化,而是兼顾语义、性能和可维护性的合理实践:

  • 大型、不可复制、构造复杂的类型,必须用const &
  • 小型、可快速复制的类型,可根据可读性或团队规范选择传值
  • 别依赖编译器的“自动优化”,显式的const &能保证代码在任何场景下的语义和性能一致性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 09:05:11