问号在类型参数中的含义是什么意思?

时间:2015-05-19 18:40:41

标签: generics rust

我找到了std::borrow::BorrowMut的定义:

pub trait BorrowMut<Borrowed>: Borrow<Borrowed>
where
    Borrowed: ?Sized,
{
    fn borrow_mut(&mut self) -> &mut Borrowed;
}

Sized前面的问号在此类型参数中的含义是什么(Borrowed: ?Sized)?

我咨询过:

但未找到解释。请在答案中提供参考。


¹特别参见5.20 Traits 部分
²和部分6.1.9 Traits

1 个答案:

答案 0 :(得分:25)

这意味着特征是可选。当前语法是在DST syntax RFC

中引入的

我所知道的唯一适用于?的特征是Sized

在这个具体示例中,我们可以为未归类型实施BorrowMut,例如[T] - 请注意,此处没有&

一个内置实现使用它:

impl<T> BorrowMut<[T]> for Vec<T>

作为Matthieu M. adds

  

这是加宽界限的情况;通常,边界强加更多约束,但在Sized的情况下,除非另有说明,否则将确定通用T将被假定为Sized。注意相反的方法是将其标记为?Sized(“可能Sized”)。