devterview_$ iniciar simulação

`String` x `&str` (e `Vec<T>` x `&[T]`)

MédioPlenoOwnership

Pergunta

Qual a diferença entre `String` e `&str` em Rust, e por que uma função deve normalmente receber `&str`?

Resposta esperada

`String` é dona: um buffer no heap, crescível, que ela desaloca ao sair de escopo. `&str` é uma FATIA emprestada — um ponteiro + tamanho pra uma sequência UTF-8 que vive em outro lugar (dentro de uma `String`, num literal `"..."` que está no binário, etc.). Uma função que só LÊ o texto deve receber `&str`: assim ela aceita tanto uma `String` (via deref coercion, `&minha_string` vira `&str`) quanto um literal quanto uma sub-fatia, sem forçar o chamador a alocar/clonar. Receber `String` obriga o chamador a entregar a posse (mover ou clonar). Mesma lógica pra `Vec<T>` (dono) x `&[T]` (fatia emprestada): parâmetro de leitura → `&[T]`. Você só recebe `String`/`Vec` quando precisa MESMO da posse (guardar o valor, mutá-lo e devolver).

Por que perguntam isso

Pergunta pleno de Rust. Sinal de domínio: 'deref coercion', 'parâmetro de leitura recebe a fatia emprestada', e o paralelo Vec/&[T].

#string#str#slices#borrow
publicidade

Perguntas de acompanhamento

Relacionadas