Rust中,*const T和*mut T的区别是什么?

*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是不变的。
本作品采用《CC 协议》,转载必须注明作者和本文链接
令狐一冲
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
文章
255
粉丝
120
喜欢
308
收藏
128
排名:335
访问:2.8 万
私信
所有博文
社区赞助商