変数がmut
を使って明示的に変更可能であると宣言されていないと、変数が変更不能になります(宣言後は変更できません)。では、なぜRustにconst
というキーワードがありますか?彼らは同じではありませんか?そうでない場合は、どう違いますか?Rustの不変変数とconst変数の違いは何ですか?
11
A
答えて
11
const
、さびで、一定の略であり、コンパイル時の評価に関連しています。それが現れる:
- 宣言定数:
const FOO: usize = 3;
- 宣言コンパイル時の評価関数:値の
const fn foo() -> &'static str
これらの種類は、一般的なパラメータとして使用することができる:[u8; FOO]
。今のところこれは配列の大きさに制限されていますが、今後さらに拡張する予定の話、計画、希望があります。対照的に、let
バインディングは、実行時の計算値とほぼ同じです。
可変性の概念がよく知られているので、mut
が使用されていますが、Rustは実際にここにあります。 &T
と&mut T
はエイリアシングではなく、可変性について、次のとおりです。
&T
:共有参照&mut T
:ユニーク参照
最も顕著なのは、いくつかの種類が内部可変性を特長としており(&T
を経由して突然変異させることができます共有参照):Cell
、RefCell
、Mutex
など
注:ここで説明されていない生のポインタ(*mut T
と*const T
)とmut
とconst
の代替使用があります。
1
const
はすべてが伴うコンパイル時定数です。たとえば、サイズがconst
の固定サイズの配列を作成することはできますが、let
バインドではできません。もちろん、これはconst
よりもはるかに多くのものをlet
バインディングに入れることができることを意味します。
8
const
は変数ではありません。それはどこにも格納されないかもしれない一定の値のためです。彼らは実質的にはリテラル値のエイリアスです。いくつかのケースで(それは例えば、Cell
メンバーが含まれている場合)
非mut
let
は、実行時に作成された実際の変数は、内部可変性を持っていても、移動することができる(そして、もはやアクセス可能)、および宣言していません。
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. 不変変数と可変変数の違いは何ですか?
- 2. 参照変数とconstポインタ変数の違いは何ですか?
- 3. データ型変数と変数V2の違いは何ですか?
- 4. Volatile変数とAtomic変数の違いは何ですか?
- 5. クラス変数とグローバル変数の違いは何ですか?
- 6. definePlugin変数とenv変数の違いは何ですか?
- 7. 通常の変数とRubyのインスタンス変数との違いは何ですか?
- 8. セッション中の(Caching)変数と[格納]変数の違いは何ですか?
- 9. C#の静的変数と動的変数の違いは何ですか?
- 10. Haskellの不変変数とは何ですか?
- 11. (変数).toFixed(2)と+(変数).toFixed(2)の違いは何ですか?
- 12. C#で変数を参照する変数とデータを含む変数の違いは何ですか?
- 13. ローカル変数、インスタンス変数、グローバル変数、およびクラス変数の違いは何ですか?
- 14. ColdFusionのcfpropertyタグ定義変数と変数scope変数の違いは何ですか?
- 15. ローカル変数とグローバル変数の違い
- 16. Pythonのリテラルと変数の違いは何ですか?
- 17. SSIS 2012のパラメータと変数の違いは何ですか?
- 18. sparkの変換とrdd関数の違いは何ですか?
- 19. Cのポインタとグローバル変数の違いは何ですか?
- 20. ウィンドウとトップのjavascriptグローバル変数の違いは何ですか?
- 21. sassの変数とmixinの違いは何ですか?
- 22. mvcのtempdata.peek()とセッション変数の違いは何ですか?
- 23. Pentaho DIの "変数"と "フィールド"の違いは何ですか?
- 24. Constオブジェクト、Constメンバー関数、およびC++での可変変数
- 25. オブジェクトと変数の違いは何ですか?
- 26. クラス変数とクラスインスタンスの違いは何ですか?
- 27. プロパティとインスタンス変数の違いは何ですか?
- 28. グローバル変数と内部クラスの違いは何ですか?
- 29. `USER`と` USERNAME`環境変数の違いは何ですか?
- 30. current_appとgコンテキスト変数の違いは何ですか?