变量
编程中的变量,在内存中,表现形式是内存地址+该地址存储的值。rust对该值的操作(读写)进行控制。值只能有一个变量对其有控制权
- 不可变变量 只能绑定初始值,取得初始值所有权,在该所有权有效期也就是作用域内,值不可变
- 可变变量 值在作用域内可以改变
引用
- 不可变变量能具有多个不可变引用,不能具有可变引用
- 可变变量最多只有有一个可变应用,能有多个不可变引用。存在不可变引用时,不允许对值 进行修改
fn main() {
let s0 = String::from("hello");
let r1 = &s0;
let r2 = &s0;
let r1 = &mut s0; // 报错
let mut s1 = String::from("hello");
let r0 = &mut s1;
let r1 = &s1;
let r2 = &s1;
s1.push_str("123"); // 报错
}
悬挂引用
fn main() {
let reference_to_nothing = dangle();
}
fn dangle() -> &String {
let s = String::from("hello");
&s
}
这种情况是禁止的,与c,c++相同,go则是会发生变量逃逸