哈哈哈一个非常好玩的视频
0:00 /0:10 1×
0:00 /0:10 1×
一、泛型编程 1. 泛型约束(where从句) 作用:为泛型参数添加约束条件,限制可接受的类型范围。 use std::fmt::Display; // 泛型约束的两种写法 fn print<T: Display>(item: T) { println!("{}", item); } fn print_where<T>(item: T) where T: Display, { println!("{}", item); } struct Pair<T> { a: T, b: T, } // 为实现了Display
1. Sized:类型大小 底层原理 * 内存对齐:Sized 类型在栈上分配时,编译器必须知道其确切大小和对齐要求 * 类型系统守卫:Rust 默认要求泛型参数满足 T: Sized,因为编译器需要为泛型代码生成具体实现 * DST 的妥协:?Sized 放松约束,允许处理如 [T] 或 dyn Trait 等动态类型 深入示例 // 展示 Sized 的隐式约束 fn generic_fn<T>(t: T) {} // 实际等价于 fn generic_fn<T: Sized>(t: T) // 处理动态类型需要指针包装 fn unsized_types(
一、if let 表达式 用途:简化单分支模式匹配,处理特定模式并忽略其他情况。 基本语法 if let Pattern = Expression { // 匹配成功时的逻辑 } else { // 匹配失败时的逻辑(可选) } 示例 let opt = Some(42); // 只处理 Some 情况 if let Some(x) = opt { println!("值为: {}", x); // 输出: 值为: 42 } // 处理 Some 和 None if let Some(50) = opt { println!("匹配到50"
一、所有权系统(Ownership System) 1. 内存管理基础 * 基于栈(Stack)和堆(Heap)的差异: * 栈:自动管理,FILO结构,存储固定大小类型 * 堆:动态分配,存储不定大小类型,需要显式管理 * Rust 采用"谁创建谁负责释放"的原则,无垃圾回收机制 2. 所有权规则实现 * 每个值有且仅有一个所有者(Owner) * 当值被绑定到变量时,该变量成为值的所有者 * 当所有者离开作用域时,值会被自动释放(调用 drop trait) 3. 移动语义(Move Semantics) * 赋值操作默认执行移动而非拷贝: let s1 = String::from("hello"); let
© 2025 路不易All rights reserved.