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

Rust中函数返回值是否为浅拷贝?结合代码场景咨询

Rust函数返回String时的行为解析

先看你给出的代码片段:

调用代码:

let x = String::from("Hello");
let y = do_something(x);

函数定义:

fn do_something(s: String) -> String { s }

首先纠正一个误解:你提到的“传参时进行浅拷贝”并不准确——对于String这种拥有所有权的类型,Rust的传参行为是所有权移动(move),而非浅拷贝。当你把x传入do_something时,x的所有权会直接转移给函数参数s,此时原作用域里的x就无法再被使用了。

再来说返回值的行为:函数返回String时,同样遵循所有权移动规则——函数内部的s会把所有权转移给调用方的y。但这里有个关键的编译器优化:Rust会自动执行返回值优化(RVO),甚至可能直接将x的所有权直接转移给y,完全跳过中间的s的复制操作,也就是说你担心的“浅拷贝栈值”动作根本不会实际发生。

总结一下:

  • 从语义层面看,是两次所有权转移:x → s → y
  • 从实际执行层面看,编译器会优化掉所有不必要的拷贝,最终等价于x的所有权直接移交y,没有额外开销

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 10:01:16