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

调用值返回函数时,局部变量应使用引用还是副本赋值?

嘿,咱们先把这段C++相关的内容整理得明明白白,顺便聊聊你和队友的这个代码风格分歧~

我们现有的值返回函数

首先是咱们定义的几个返回对象的函数:

Foo function_1(){ 
    Foo f; 
    // ... 一些初始化逻辑
    return f; 
}

Bar function_2(){ 
    Bar b; 
    // ... 一些初始化逻辑
    return b; 
}

Baz function_3(){ 
    Baz b; 
    // ... 一些初始化逻辑
    return b; 
}

我当前的实例化写法

我现在是直接通过调用这些函数创建局部变量:

void example(){ 
    //... 其他代码
    const auto foo = function_1(); 
    //... 其他代码
    const auto bar = function_2(); 
    //... 其他代码
    const auto baz = function_3(); 
}

队友的修改要求

不过队友一直要求我把所有实例化改成使用**const auto&**的形式,也就是把变量声明为常量引用:

void example(){ 
    //... 其他代码
    const auto& foo = function_1(); 
    //... 其他代码
    const auto& bar = function_2(); 
    //... 其他代码
    const auto& baz = function_3(); 
}

额外补充点小知识(供你和队友讨论)

其实在现代C++(C++11及以后)里,这两种写法的性能差异几乎可以忽略:

  • 直接赋值的写法会触发返回值优化(RVO/NRVO),编译器会跳过临时对象的创建和拷贝,直接在目标变量的内存位置构造对象,不会有额外开销。
  • 使用const auto&的话,会延长函数返回的临时对象的生命周期,同样也不会有拷贝操作,而且写法上更强调“不修改这个对象”的语义。

所以两种写法都是合理的,可能队友是出于代码风格的统一,或者想明确表达变量的只读属性才提出这个要求~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:52:31