不可变变量:初始化之后不会再变。“从现在开始,它不会再变了”
但初始化本身可以依赖变量,可能多次调用它所在的函数可能就得到不同的值。
比如let y = x + 1
之后所有 y
都可以用x + 1
代替,你可以知道y - 1
一定是x
,但不知道它确切是多少,可能是运行时相关的。
常量:初始化过程完全静态(编译期已知),且也不会变。“这始终就是一个确定【静态】值”
比如const x: i32 = 1
之后,和x
相关的计算全都可以静态确定,进而有更多信息可以优化。
示例:
fn main(){ let mut x = 2; let a = x + 1; println!("a = {}",a); x = 20; println!("a = {}",a) }
编译运行:
cargo run
Compiling var_const v0.1.0 (....var_const)
warning: value assigned to `x` is never read (赋给' x '的值不会被读取)
--> srcmain.rs:6:5
|
6 | x = 20;
| ^
| = note: `#[warn(unused_assignments)]` on by default
= help: maybe it is overwritten before being read?
warning: 1 warning emitted
Finished dev [unoptimized + debuginfo] target(s) in 0.83s
Running `targetdebugvar_const.exe`
a = 3
a = 3