Rust 标准库函数详解

Rust 的「标准库函数」层 = std 提供的自由函数与模块级函数(不是类型的方法)。这些函数散落在 std::mem / str / slice / num / cmp / convert / ptr 等模块,日常用得最多但常被忽略。

1. std::mem – 内存工具函数

描述

size_of/align_of 取类型尺寸、swap 交换、replace 替换并返回旧值、take 取走留默认、forget 跳过析构。

语法和示例

<code class="language-['mem::forget 会导致内存泄漏——只在你明确要转移所有权给外部时用', 'size_of::() 是编译期常量,可用于数组长度', 'replace 是「取出旧值并放入新值」的惯用法,常用于状态机切换', 'take 要求类型实现 Default']">use std::mem;
mem::size_of::<u64>();            // 8
mem::align_of::<u64>();           // 8
let mut a = 1; let mut b = 2;
mem::swap(&mut a, &mut b);        // a=2, b=1
let old = mem::replace(&mut a, 9); // old=2, a=9
let taken = mem::take(&mut a);     // taken=9, a=0(Default)
mem::forget(Box::new(1));          // 跳过析构(泄漏)
mem::discriminant(&Some(1));       // 取枚举变体标识

注意事项

  • r
  • u
  • s
  • t

2. std::str / &str 方法

描述

字符串切片的方法:trim/split/lines/parse/contains/replace/starts_with 等。注意很多按字节处理。

语法和示例

let s = "  hi  ";
s.trim();                        // "hi"
s.trim_start_matches('/');
s.contains("hi"); s.starts_with("  ");
s.split(',').collect::<Vec<_>>();
s.lines().count();
"42".parse::<i32>()?;              // Result
s.replace("i", "o");
s.char_indices().next();           // (0, ' ')
s.as_bytes(); s.to_uppercase();
format!("{:>8}|", s);               // 宽度对齐

注意事项

  • r
  • u
  • s
  • t

3. slice 方法 – 数组/切片操作

描述

chunks/windows/split_at/binary_search/sort/dedup 等。切片方法比 Vec 方法更通用(Vec 自动 deref)。

语法和示例

let mut v = [3, 1, 2, 2];
v.sort(); v.dedup();              // [1,2,3]
v.chunks(2);                      // [[1,2],[3]]
v.windows(2);                     // [[1,2],[2,3]]
v.split_at(2);                    // ([1,2],[3])
v.binary_search(&2);              // Ok(索引) / Err(插入点)
v.contains(&2); v.iter().max();
let (a, b) = v.split_first().unwrap();
v.reverse(); v.rotate_left(1);
v.fill(0);

注意事项

  • r
  • u
  • s
  • t

4. 数字方法 – 解析、转换与饱和运算

描述

parse/checked_/saturating_/wrapping_/overflowing_ 四套算术:溢出时分别 panic/None/截断/回绕。

语法和示例

let n: i32 = "42".parse().unwrap();
(255u8).checked_add(1);           // None
(255u8).saturating_add(1);        // 255
(255u8).wrapping_add(1);          // 0
(255u8).overflowing_add(1);       // (0, true)
(2.5f64).floor(); (2.5).round();
(-7i32).div_euclid(2);            // -4(欧几里得除)
(-7i32).rem_euclid(2);            // 1
i32::from_str_radix("ff", 16);

注意事项

  • r
  • u
  • s
  • t

5. std::cmp – 比较与排序

描述

min/max/clamp 自由函数、Ordering 枚举、Reverse 包装反转排序。

语法和示例

use std::cmp::{min, max, Ordering, Reverse};
min(3, 5); max(3, 5); 3.clamp(1, 10);
a.cmp(&b);                        // Ordering
v.sort_by(|a, b| b.cmp(a));       // 降序
v.sort_by_key(|x| Reverse(x.0));  // 用 Reverse 包装
v.max_by_key(|x| x.score);
// 自定义全序
#[derive(PartialEq)]
struct P(f64);
impl Eq for P {}
impl PartialOrd for P { fn partial_cmp(&self, o: &Self) -> Option<Ordering> { Some(self.cmp(o)) } }
impl Ord for P { fn cmp(&self, o: &Self) -> Ordering { self.0.total_cmp(&o.0) } }

注意事项

  • r
  • u
  • s
  • t

6. std::convert – 类型转换函数

描述

identity 返回自身、Into/From/TryFrom 的调用形态、as 强转与 FromStr。

语法和示例

let n: u64 = 42u32.into();          // Into
let s = String::from("x");          // From
let n: i64 = 100i32.into();
"42".parse::<i32>();                 // FromStr
let small = i32::try_from(300i64);   // Result(可能溢出)
let f = 1.5f64 as i32;               // as 强转(截断,不检查)
std::convert::identity(x);           // 返回自身(函数式占位)

注意事项

  • r
  • u
  • s
  • t

7. std::ptr – 裸指针(unsafe)

描述

null/null_mut 构造空指针、read/write 读写、as_ref 转引用、swap_nonoverlapping。

语法和示例

use std::ptr;
let p: *const i32 = ptr::null();
if !p.is_null() { unsafe { println!("{}", *p); } }
let mut x = 5;
let mp: *mut i32 = &mut x;
unsafe { *mp = 6; }
unsafe { ptr::write(mp, 7); }
unsafe { ptr::read(mp); }
// 空指针检查
std::ptr::NonNull::<i32>::new(&mut x);

// 引用与指针的常见转换
let x = 5;
let r: &i32 = &x;
let raw: *const i32 = r as *const i32;
unsafe { assert_eq!(*raw, 5); }
let nr = std::ptr::NonNull::from(&x);

注意事项

  • r
  • u
  • s
  • t

8. std::any – 运行时类型判断

描述

type_id 取类型标识、downcast_ref 向下转型、is 判断类型。用于 Box 场景。

语法和示例

use std::any::{Any, TypeId};
let b: Box<dyn Any> = Box::new(42i32);
b.downcast_ref::<i32>();          // Some(&42)
b.is::<i32>();                    // true
TypeId::of::<i32>();
// 日志/插件的动态分发
fn log(x: &dyn Any) {
    if let Some(n) = x.downcast_ref::<i32>() { println!("{n}") }
}

注意事项

  • r
  • u
  • s
  • t

9. std::io – 输入输出函数

描述

stdin/stdout 读写、read_line、copy、Write trait 的 flush/write_all。

语法和示例

use std::io::{self, Read, Write};
let mut buf = String::new();
io::stdin().read_line(&mut buf)?;
io::stdout().write_all(b"hi")?;
io::stdout().flush()?;
// 读整个 stdin
let mut all = String::new();
io::stdin().read_to_string(&mut all)?;
// 拷贝
let mut src = io::stdin();
io::copy(&mut src, &mut io::stdout())?;

// 分块读写的常用组合
use std::io::{BufRead, BufReader};
let f = std::fs::File::open("a.txt")?;
let reader = BufReader::new(f);
for line in reader.lines() { println!("{}", line?); }

注意事项

  • r
  • u
  • s
  • t

10. std::env – 环境与参数函数

描述

args/args_os/var/var_os/vars/current_dir/set_current_dir/temp_dir。

语法和示例

let args: Vec<String> = std::env::args().skip(1).collect();
std::env::var("HOME").unwrap_or_default();
std::env::vars().filter(|(k, _)| k.starts_with("APP_"));
std::env::current_dir()?;
std::env::temp_dir();
std::env::consts::OS;               // "linux" / "windows"
std::env::consts::ARCH;
// 参数解析建议用 clap(标准库只有 args)

注意事项

  • r
  • u
  • s
  • t

11. std::process / std::thread 函数

描述

Command 构造子进程、exit 退出、thread::sleep/yield_now/scope 线程工具。

语法和示例

use std::process::{Command, exit};
let out = Command::new("git").arg("status").output()?;
out.status.success();
exit(1);
use std::thread;
thread::sleep(std::time::Duration::from_millis(100));
thread::yield_now();                // 让出 CPU
thread::available_parallelism()?;   // 逻辑核数
thread::scope(|s| { s.spawn(|| work()); });

注意事项

  • r
  • u
  • s
  • t

这个系列的其他文档

暂无评论

发送评论 编辑评论

|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇