​*const T​​​和​​*mut T​​​的区别是什么?为什么Unique的实现中,是使用​​*const T​​​而不是使用​​*mut T​​?

答案:

(1)解引用后的区别,​​*const T​​​指针解引用对应&T,​​*mut T​​解引用对应&mut T;

(2)在安全的代码中,可以将​​*const T​​​转换为​​*mut T​​,因为对于解引用之前,都是原始裸指针,原始裸指针之间转换时可以的;

(3)为什么Unique的实现中,使用​​*const T​​​而不是​​*mut T​​,其原因如下:

  • 根据Rust的规则,只有真正拥有变量或者是可变引用的情况下,才能修改变量,对于指针我们可以同样的理解;
  • 因此,在满足安全的情况下,要求Unique是协变的;
  • 根据我们在死灵书3.8节子类型和变性中的内容,*const T是对T是协变的。

补充知识:

  • ​*const T​​对于T是协变的;
  • ​*mut T​​对于T是不变的。