2020 09 26 請問rust中的 和c 中的 有哪些區別?

時間 2021-06-01 01:51:45

1樓:被子飛了

這個問題實質上是要分清 Rust 和 C++ 各自的「指標」和「引用」型別。

先來看 C++。C++ 的指標沿襲自 C 語言,就是乙個記憶體位址,其型別決定了編譯器如何操作該位址上的資料;C++ 的引用則是語義上的創新,建立引用相當於指定物件別名,在函式傳參的情況下仍然相當於傳指標,但由編譯器自動幫你執行各種指標操作比如解引用、改 . 為 -> 。

Rust 裡的指標和引用都是記憶體位址資料,區別是引用帶有編譯期檢查,確保不會出現指向失效記憶體、多個可變引用等情況,而指標操作被視為不安全的,必須在 unsafe 塊中進行。Rust 有自動 deref 的語法糖,因此沒有 -> 運算子,在引用成員和呼叫方法時引用和資料物件使用的一樣的語法。

在 C++ 和 Rust 中,& 都有作為運算子和型別構造符的作用。在 C++ 和 Rust 裡 & 作為雙目運算子意義都是邏輯與;作為單目運算子都是「取位址」,區別在於 Rust 用 & 取位址得到的是乙個帶編譯期借用檢查的引用型別;在型別上時,語法不一樣,C++ 是 T&,Rust 是 &T,同時兩個型別的語義也完全不一樣。

如何評價Rust1 26中的新特性

鏈結不能不放啊 https blog.rust lang.org 2018 05 10 Rust 1.26.html 例子基本都有了。我認為 impl trait 的主要用途以及和 trait object Box 或 Foo 的主要區別在於函式簽名的返回型別 比如典型的返回乙個 closure b...

怎麼通俗的理解Rust中的生命週期?

已登出 簡短回答 生命週期代表資源的可用時期。顯式生命週期標記是泛型引數的一種,但是有協變的概念。長生命週期作為短生命週期的子型別,此處與直覺相反。詳細回答分割線 宣告乙個變數,其生命週期開始,變數離開作用域,其生命週期結束。以上是生命週期的基本概念,和其他語言相比並沒有什麼不同。題主想問的是生命週...

rust中如何實現返回可變引用的迭代器?

Jason5Lee 找到乙個trade off pubstruct RowIter a impl a Iterator forRowIter a Nugine 沒有什麼所有權問題是 Rc 不能解決的,如果有,那就再套一層。開完玩笑,讓我們看看為什麼 Safe Rust 中無法實現題目中的邏輯。迭代器...