类型参数约束中的问号是什么意思(where T: ?Sized)?
大家好!我最近开始学习 Rust,遇到了类型参数约束中的奇怪语法。看到这样的代码:
```rust
use std::fmt::Debug;
fn print_debug(value: &T) {
println!("{:?}", value);
}
```
我理解 `T: Debug` 是一个约束,表示类型 T 必须实现 `Debug` trait。但是 `Sized` 前面的问号是做什么的?我知道 `Sized` 是一个自动 trait,用于那些在编译时大小已知的类型。但为什么我们可以写 `?Sized`?这改变了什么?
我尝试去掉 `?Sized`,只写 `T: Debug`,代码仍然可以编译。那区别在哪里?什么时候需要使用 `?Sized`?除了 `?Sized` 之外,问号在约束中还有其他用法吗?
希望得到详细的解释。我已经搜索过,但文档中的解释似乎过于正式。我想通过例子来理解它是如何工作的以及为什么需要它。