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