O que significa o ponto de interrogação na restrição de parâmetro de tipo (where T: ?Sized)?
Olá, colegas! Recentemente comecei a estudar Rust e me deparei com uma sintaxe estranha nas restrições de parâmetro de tipo. Vi um código assim:
```rust
use std::fmt::Debug;
fn print_debug(value: &T) {
println!("{:?}", value);
}
```
Eu entendo que `T: Debug` é uma restrição que diz que o tipo T deve implementar a trait `Debug`. Mas o que faz o ponto de interrogação antes de `Sized`? Eu sei que `Sized` é uma trait automática para tipos cujo tamanho é conhecido em tempo de compilação. Mas por que podemos escrever `?Sized`? O que isso muda?
Tentei remover `?Sized` e escrever apenas `T: Debug`, e o código ainda compilou. Qual é a diferença então? Quando devo usar `?Sized`? E existem outros usos do ponto de interrogação em restrições, além de `?Sized`?
Ficarei grato por uma explicação detalhada. Já pesquisei, mas na documentação a explicação parece muito formal. Quero entender com exemplos como isso funciona e por que é necessário.
No answers yet.
Faça login para deixar uma resposta