编写 Unsafe 函数
如果您自己编写的函数需要满足特定条件以避免未定义的行为, 您可以将这些函数标记为 unsafe
。
/// Swaps the values pointed to by the given pointers. /// /// # Safety /// /// The pointers must be valid and properly aligned. unsafe fn swap(a: *mut u8, b: *mut u8) { let temp = *a; *a = *b; *b = temp; } fn main() { let mut a = 42; let mut b = 66; // Safe because ... unsafe { swap(&mut a, &mut b); } println!("a = {}, b = {}", a, b); }
实际上,我们不会这样使用指针,因为使用引用可以安全地达到相同的目的。
请注意,在不安全函数中,可以在没有 unsafe
代码块的情况下使用不安全代码。我们可以 使用 #[deny(unsafe_op_in_unsafe_fn)]
来禁止此行为。请尝试添加该命令,看看会出现什么情况。