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

需修改参数且保留原变量时,传值还是const引用更优?

回答

你的判断完全正确,Bar2的写法确实能保证传入右值时触发移动构造,避免不必要的拷贝,具体细节如下:

  1. 右值场景的标准保证
    当传入右值(比如临时对象、被std::move()转换后的左值)时,Bar2的形参x会优先匹配X的移动构造函数——只要X拥有合法的移动构造(哪怕是编译器自动生成的默认版本),这是C++标准明确规定的行为,不存在歧义。

  2. 两种写法的效率对比

  • 对于左值输入:Bar2会先拷贝构造形参x,和Bar1里拷贝局部变量的成本完全一致;
  • 对于右值输入:Bar1里的auto mutable_x {x};只能触发拷贝构造(因为x是const X&类型,无法从const引用绑定的右值触发移动),而Bar2可以直接移动,开销远低于拷贝。
  1. 与C++核心指南的契合度
    虽然核心指南没有直接针对这种场景给出条目,但它的核心原则之一就是避免不必要的拷贝,Bar2的写法完全符合这一原则,没必要刻意退回到Bar1的实现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 08:33:23