我瞭解到如果一個變量沒有使用mut
顯式聲明爲mutable,它就變成不可變的(它不能在聲明後改變)。那麼爲什麼我們在Rust中有const
關鍵字?他們不一樣嗎?如果不是,他們有什麼不同?Rust中的immutable和const變量有什麼區別?
11
A
回答
11
const
,拉斯特,是短期的恆定並且與編譯時計算。它顯示了:
- 聲明時常量:
const FOO: usize = 3;
聲明時 - 編譯時評估的功能:
const fn foo() -> &'static str
這些類型的值可以被用作通用參數:[u8; FOO]
。目前這僅限於數組大小,但有一些談話,計劃和希望將來會進一步擴展。
相比之下,let
結合是大約一個運行時計算的值。
注意的是,儘管mut
被使用,因爲可變性的概念是衆所周知的,實際上鏽就在這裏。 &T
和&mut T
約爲走樣,不可變性:
&T
:共享參考&mut T
:唯一的參考
最值得注意的是,某些類型的特徵內部易變性並且可以經由&T
被突變(共享的參考文獻):Cell
,RefCell
,Mutex
等
注:還存在另一種使用的mut
和const
與這裏不討論原始指針(*mut T
和*const T
)。
1
const
是與需要的一切編譯時間常數。例如,您可以創建一個固定大小的數組,其大小爲const
,但您無法通過綁定let
來完成此操作。當然,這也意味着您可以將更多的東西放入let
綁定中,而不是放入const
。
8
const
不變量;它適用於不能存儲在任何地方的恆定值;它們實際上是字面值的別名。
非mut
let
宣佈其在運行時創建一個實際的變量,可以移動(而不再訪問),甚至有內部的可變性(如果它包含Cell
成員,例如)在某些情況下。
0
常量不能重新定義:
let x = 10u32;
const Y:u32 = 20u32;
let x = 11u32;
//error: duplicate definition of value `Y` [E0428]
//const Y:u32 = 21u32;
println!("x={} Y={}",x,Y); //x=11 Y=20
相關問題
- 1. if(CONST ==變量)或if(變量== CONST)有什麼區別?
- 2. mutable和immutable之間有什麼區別?
- 3. static const和const有什麼區別?
- 4. Rust的`String`和`str`有什麼區別?
- 5. const和靜態變量之間有什麼區別?
- 6. 靜態const和constexpr變量有什麼區別?
- 7. 變量的=和=>有什麼區別?
- 8. var和const有什麼區別?
- 9. T&和T * const有什麼區別?
- 10. static const char * const和static const char []之間有什麼區別?
- 11. TARGET_ARCH和TARGET_MACH變量有什麼區別?
- 12. definePlugin和env變量有什麼區別?
- 13. 對象和變量有什麼區別?
- 14. Rust中的宏和函數有什麼區別?
- 15. Rust中的extern fn和extern「C」fn有什麼區別?
- 16. ember-data中的mutable array&immutable數組有什麼區別?
- 17. 在Rust中,println中「{}」和「{:?}」有什麼區別!?
- 18. 「const int&jj」和「int&const jj」有什麼區別?
- 19. 參考變量和常量指針變量有什麼區別?
- 20. 變量===常數和常量===變量有什麼區別
- 21. Tensorflow中的張量和變量有什麼區別
- 22. 非局部變量和全局變量有什麼區別?
- 23. C:指針=變量和指針=變量有什麼區別?
- 24. PL/SQL變量和非PL/SQL變量有什麼區別?
- 25. 閱讀查詢變量和正文變量有什麼區別?
- 26. 靜態變量和全局變量(Java)有什麼區別?
- 27. 在Tensorflow中,變量和張量之間有什麼區別?
- 28. C中的const和volatile指針有什麼區別?
- 29. 這些PHP變量有什麼區別?
- 30. SSIS 2012中的參數和變量有什麼區別?