【发布时间】:2021-07-26 15:23:19
【问题描述】:
如果我将一个变量(具有没有复制语义的类型)分配给第二个变量,即使第一个变量不能再使用/访问,rustc 也会创建该值的副本。
例如:
#[derive(Debug)]
struct T {
val: i32,
}
fn main() {
let v1 = T { val: 123 };
let v2 = v1;
// println!("{:?}", v1); error!
println!("{:?}", v2);
}
这会生成包含两个存储操作的 LLVM IR:
%v2 = alloca i32, align 4
%v1 = alloca i32, align 4
store i32 123, i32* %v1, align 4
store i32 123, i32* %v2, align 4
如果第一个副本不能再使用,用移动语义复制值不是不必要的工作量吗?
【问题讨论】: