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

Rust中Vec的push方法是否会获取参数的所有权?

为什么调用Vec::push后原变量还能继续使用?

你对Vec::push方法签名的理解是对的——它的参数确实是T类型,按设计会接收参数的所有权。但你代码里的特殊情况,核心原因是你的变量类型实现了Copy trait。

具体拆解:

  • 你代码中的x是i32类型,Rust里所有整数、浮点数、布尔值等基础类型都默认实现了Copy trait。当调用v.push(x)时,Rust会自动复制x的数值,把这个副本传递给push方法,原变量x的所有权完全没被转移,所以之后你依然可以修改、使用它。
  • 如果换成一个没有实现Copy的类型,比如String,那调用push后原变量就会失去所有权,再使用就会触发编译错误。比如这段代码:
let mut v = vec![];
let x = String::from("test");
v.push(x);
// println!("{}", x); // 编译报错:value borrowed here after move

简单总结:

  • 当参数类型实现Copy时,传递T会自动复制值,原变量不受影响;
  • 当参数类型未实现Copy时,传递T会转移所有权,原变量无法再使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 09:12:36