什么情况下应将函数标记为“unsafe”,而不是仅使用“unsafe”块?我在阅读另一个答案时看到了这个函数:(链接)。
unsafe fn as_u8_slice(xs: &[i32]) -> &[u8] {
std::slice::from_raw_parts(v.as_ptr() as *const u8,
v.len() * std::mem::size_of::<i32>())
}
我可能会这样编写函数:
fn as_u8_slice(xs: &[i32]) -> &[u8] {
unsafe {
std::slice::from_raw_parts(v.as_ptr() as *const u8,
v.len() * std::mem::size_of::<i32>())
}
}
也就是说,我感觉在所有情况下“调用函数”是安全的,但是编译器无法验证函数内部实际执行了什么。然而,我没有任何规则来确定何时使用其中之一。