traduccion ps4 lenguaje language descargar rust

rust - ps4 - ¿Cuál es la diferencia entre Copy y Clone?



rust traduccion (2)

La principal diferencia es que la clonación es explícita. La notación implícita significa movimiento para un tipo que no sea Copy .

// u8 implements Copy let x: u8 = 123; let y = x; // x can still be used println!("x={}, y={}", x, y); // Vec<u8> implements Clone, but not Copy let v: Vec<u8> = vec![1, 2, 3]; let w = v.clone(); //let w = v // This would *move* the value, rendering v unusable.

Por cierto, también se requiere que cada tipo de Copy sea Clone . Sin embargo, ¡no están obligados a hacer lo mismo! Para sus propios tipos, .clone() puede ser un método arbitrario de su elección, mientras que la copia implícita siempre activará una memcpy , no de clone(&self) .

Este problema parece implicar que es solo un detalle de implementación ( memcpy vs ???), pero no puedo encontrar ninguna descripción explícita de las diferencias.


Clone está diseñado para duplicaciones arbitrarias: una implementación de Clone para un tipo T puede realizar operaciones complicadas arbitrariamente necesarias para crear una nueva T Es un rasgo normal (aparte de estar en el preludio), por lo que requiere ser utilizado como un rasgo normal, con llamadas a métodos, etc.

El rasgo Copy representa valores que se pueden duplicar de forma segura a través de memcpy : cosas como reasignaciones y pasar un argumento por valor a una función siempre son memcpy s, por lo que para los tipos de Copy , el compilador entiende que no necesita considerar esos moverse