rust

rust学习总结-2

2022-02-27  本文已影响0人  robertzhai

声明变量

let

可变性

默认不可变
mut 修饰可变

变量遮蔽(shadowing)

Rust 允许声明相同的变量名,在后面用let声明的相同名称的变量会遮蔽掉前面声明的

类型

基本类型

复合类型

语句和表达式()

表达式结尾没有";",总要返回值

   let x = x + 1; // 语句
    let y = y + 5; // 语句
    x + y // 表达式

函数

内存管理的3种机制

所有权

stack & heap

stack存储已知且固定大小的内存空间的数据,快, 如基本类型
heap存储大小未知或者可能变化的数据,慢,如struct
对比:入栈比在堆上分配内存要快,栈数据往往可以直接存储在 CPU 高速缓存中,而堆数据只能存储在内存中。访问堆上的数据比访问栈上的数据慢,因为必须先访问栈再通过栈上的指针来访问内存。处理器处理和分配在栈上数据会比在堆上的数据更加高效

所有权与堆栈

move

let s1 = String::from("rust");
let s2 = s1;

println!("{}, world!", s1);

move

克隆(深拷贝)

let s1 = String::from("rust");
let s2 = s1.clone();

println!("s1 = {}, s2 = {}", s1, s2);

函数传值与返回

借用(Borrowing)

fn main() {
   let mut s = String::from("hello");

    let r1 = &s; 
    let r2 = &s; 
    println!("{} and {}", r1, r2);
    // 新编译器中,r1,r2作用域在这里结束

    let r3 = &mut s; 
    println!("{}", r3);
} // 老编译器中,r1、r2、r3作用域在这里结束
  // 新编译器中,r3作用域在这里结束
上一篇下一篇

猜你喜欢

热点阅读