當前位置:編程學習大全網 - 編程軟體 - Rust Deref與自動解引用

Rust Deref與自動解引用

Deref和DerefMut都是Rust中的trait,用來對指針類型進行轉化,得到指針所指向的內容。比如從Box<T>或Rc<T>中得到T,或是從String中得到&str。

從名字中就可以看出來,這Deref是解引用得到壹個借用,是***享引用,RerefMut是得到壹個可變借用。

定義如下,只要針對某種類型實現了這兩個trait,就可以得到指針中的內容。

另外我們經常使用的解引用操作符*其實就是調用了deref函數。例如

我們可以看到,其實 s和 (s.deref())本質上壹樣,s.deref()和&*s壹樣

至於自動解引用,就是為了方便程序員,在變量不滿足條件的情況下,自動對變量使用解引用,比如rust的庫中針對&str實現了很多字符串的操作,然而並沒有針對string進行實現,但是我們可以直接使用string進行字符串操作,實際上是編譯器自動把&string解引用為了&str。

舉個例子

傳入的應該是str,但是實際上我們在程序中是對string進行了len的調用,在調用的時候,len接收到的參數是&string,因為編譯器發現string沒有len方法,因此嘗試自動進行解引用,也就是調用deref(),把&string轉換為了&str,因此程序可以正常運行。

編譯器發現不能夠編譯通過時,會在三種情況下嘗試進行自動解引用,所有的三種情況如下:

1.&T轉為&U,其中T: Deref<Target=U>

2.&mut T轉為&mut U,其中T: DerefMut<Target=U>

3.&mut T轉為&U,其中T: Deref<Target=U>

  • 上一篇:七元程序設計
  • 下一篇:如何搭建壹套完整的視頻直播系統
  • copyright 2024編程學習大全網