Rust中,*const T和*mut T的區別是什麼?

linghuyichong發表於2021-02-21

*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 協議》,轉載必須註明作者和本文連結
令狐一衝

相關文章