Rust的设计中为什么要区分不可变变量和常量?

不可变变量:初始化之后不会再变。“从现在开始,它不会再变了”

但初始化本身可以依赖变量,可能多次调用它所在的函数可能就得到不同的值。

比如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

原文地址:https://www.cnblogs.com/worldinmyeyes/p/14497674.html