如果您将一个类型传递给一个不是指针类型的函数并且它实现了 Copy,那么 Rust 是否仅在必要时才复制它?
下面是一些具体的代码:
#[derive(Clone, Copy)]
struct Data([u8; 2]);
#[derive(Clone, Copy)]
struct Buffer(Data);
fn do_something(id: Buffer) {
println!("{}", id.0.0[0]);
}
fn create_buffer() -> Buffer {
Buffer(Data([0x01, 0x01]))
}
fn main() {
let buffer = create_buffer();
// Since we don't use buffer again in this function, copy trait isn't necessary on Buffer.
// But, "Buffer" does implement the Copy trait. Will Rust copy it anyway?
do_something(buffer);
}
Run Code Online (Sandbox Code Playgroud)
如果 rust 不复制它,这种行为是否有规则,还是完全由编译器决定?我可以依靠这个不被复制吗?
如果我要调用 do_something(buffer) 两次怎么办?它是复制两次,还是移动一次并复制一次?这需要复制特征甚至编译,所以我希望至少有 1 个副本。
do_something(buffer);
do_something(buffer);
Run Code Online (Sandbox Code Playgroud) rust ×1