Avatar ·

Was bedeutet das Fragezeichen in der Typ-Parameter-Einschränkung (where T: ?Sized)?

Hallo Kollegen! Ich habe kürzlich angefangen, Rust zu lernen, und bin auf eine seltsame Syntax bei Typ-Parameter-Einschränkungen gestoßen. Ich habe solchen Code gesehen: ```rust use std::fmt::Debug; fn print_debug(value: &T) { println!("{:?}", value); } ``` Ich verstehe, dass `T: Debug` eine Einschränkung ist, die besagt, dass der Typ T das Trait `Debug` implementieren muss. Aber was macht das Fragezeichen vor `Sized`? Ich weiß, dass `Sized` ein automatisches Trait für Typen ist, deren Größe zur Kompilierzeit bekannt ist. Aber warum können wir `?Sized` schreiben? Was ändert das? Ich habe versucht, `?Sized` zu entfernen und einfach `T: Debug` zu schreiben, und der Code hat trotzdem kompiliert. Wo liegt dann der Unterschied? Wann sollte man `?Sized` verwenden? Und gibt es andere Verwendungen des Fragezeichens in Einschränkungen außer `?Sized`? Ich wäre dankbar für eine ausführliche Erklärung. Ich habe bereits gegoogelt, aber die Erklärung in der Dokumentation wirkt zu formell. Ich möchte anhand von Beispielen verstehen, wie das funktioniert und wofür es benötigt wird.