变量
_变量_是栈帧的组成部分,可以是命名的函数参数、匿名的[临时值]temporary或命名的局部变量。
局部变量(或栈局部分配)直接持有值,分配在栈的内存中。值是栈帧的一部分。
局部变量除非另外声明,否则是不可变的。例如:let mut x = ...。
函数参数除非用 mut 声明,否则是不可变的。mut 关键字仅适用于后面的参数。例如:|mut x, y| 和 fn f(mut x: Box<i32>, y: Box<i32>) 声明一个可变变量 x 和一个不可变变量 y。
局部变量在分配时未初始化。相反,整个帧的局部变量在帧进入时以未初始化状态分配。函数中的后续语句可能会也可能不会初始化局部变量。局部变量只能在通过所有可达控制流路径初始化后才能使用。
在下一个示例中,init_after_if 在 [if 表达式]之后初始化,而 uninit_after_if 未初始化,因为它在 else 情况下未初始化。
#![allow(unused)]
fn main() {
fn random_bool() -> bool { true }
fn initialization_example() {
let init_after_if: ();
let uninit_after_if: ();
if random_bool() {
init_after_if = ();
uninit_after_if = ();
} else {
init_after_if = ();
}
init_after_if; // ok
// uninit_after_if; // err: use of possibly uninitialized `uninit_after_if`
}
}