変数が を使用して明示的に可変として宣言されていない場合mut
、変数は不変 (宣言後に変更できない) になることを学びました。では、なぜconst
Rust には キーワードがあるのでしょうか? これらは同じではないのでしょうか? そうでない場合、どう違うのでしょうか?
ベストアンサー1
const
Rustでは、絶え間ないそして、コンパイル時の評価次のように表示されます。
- 定数を宣言する場合:
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
ここでは説明しません。const
*mut T
*const T