小编pap*_*arp的帖子

如果可能,实现 copy 的类型是否会被移动?

如果您将一个类型传递给一个不是指针类型的函数并且它实现了 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

4
推荐指数
1
解决办法
82
查看次数

标签 统计

rust ×1