es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cuál es la diferencia entre String::from(“abcd”) y “string”?

Obtengo el error:

ninguno
error[E0382]: uso de un valor movido: `x`
 --> src/lib.rs:7:13
  |
5 |     let x = String::from("abcd");
  |         - movimiento ocurre porque `x` tiene tipo `String`, que no implementa el rasgo `Copy`
6 |     let y = x;
  |             - valor movido aquí
7 |     let z = x;
  |             ^ valor utilizado aquí después del movimiento

¿No se supone que también debería obtener el mismo error para a?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    No, no obtienes el mismo error para a porque a es una subcadena de texto que tiene el rasgo Copy y, por lo tanto, puede ser copiada. En el código proporcionado, tanto b como c tienen una copia de la subcadena original a. Sin embargo, x es de tipo String, el cual no implementa el rasgo Copy y, por lo tanto, cuando x se mueve a y, la propiedad de la cadena x se transfiere a y y x ya no es válido. Intentar usar x nuevamente en la asignación a z resulta en el error “uso de valor movido”.

Comments are closed.