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

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

在此类型参数绑定(bind)(Sized)中,Borrowed: ?Sized前面的问号是什么意思?

我咨询了:
  • The Rust Programming Language¹书,
  • The Rust Reference²以及
  • 堆栈溢出
  • 上的
  • What does "Sized is not implemented" mean?

    但没有找到解释。请在回答中提供引用。

    ¹特别请参阅5.20 Traits部分
    ²和6.1.9 Traits部分

    最佳答案

    这意味着特征是可选的。当前语法已在DST syntax RFC中引入。

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

    在此特定示例中,我们可以为诸如BorrowMut之类的大小不一的类型实现[T] -请注意,这里没有&!

    一种内置的实现利用了这一点:

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

    作为Matthieu M. adds:

  • 10-06 10:51