在代码中说同样的事情,我什么时候会选择以下任何一个例子?
unsafe trait MyCoolTrait {
fn method(&self) -> u8;
}
trait MyCoolTrait {
unsafe fn method(&self) -> u8;
}
Run Code Online (Sandbox Code Playgroud)
不安全的特征是一种实现不安全的特性,因为它代表了某种可信的断言.请注意,不安全的特性使用起来非常安全.
Send和Share(注:现在叫Sync)是不安全的性状的例子:实现这些特性实际上是断言,你的类型是线程安全的.
标准库中还有另一个不安全特征的例子Searcher.它说:
特征被标记为不安全,因为
next()方法返回的索引需要位于大海捞针中有效的utf8边界.这使得该特征的消费者能够在没有额外的运行时检查的情况下切割干草堆.
不幸的是,这些段落都没有真正帮助我理解何时将整个特征标记为不安全而不是某些或所有方法是正确的.
我曾经问过将某个功能标记为不安全,但这看起来有所不同.
我不知道如何将a Vec<i32>转换为&[u8]切片.
fn main() {
let v: Vec<i32> = vec![1; 100_000_000];
let v_bytes: &[u8] = /* ... */;
}
Run Code Online (Sandbox Code Playgroud)
我想写一个大Vec<i32>文件到一个文件,所以我可以在将来阅读它.