*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是不变的。