2015-05-19 29 views
24

我发现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

回答

14

这意味着,所述性状是可选。当前语法在DST syntax RFC中引入。

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

在这个具体的例子,我们可以实现BorrowMut无胶类型,像[T] - 请注意,这里没有&

一个内置的实现使用的是:

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

由于Matthieu M. adds

这是加宽必然一个的情况;在一般范围征收的限制,但在Sized的情况下决定,除非另有说明通用T会被认为是Sized。注意相反的方法是标记它?Sized(“也许Sized”)。

+6

具体来说:这是一个扩大边界*的情况;在一般情况下,边界施加了更多的约束,但是在“Sized”的情况下,决定除非另有说明,否则通用的T将被认为是“Sized”,并且注意到标记它的方式是“Sized '(也许'Sized')。 –