它是安全地调用set_len上Vec已宣布的能力?像这样:
let vec = unsafe {
    let temp = Vec::with_capacity(N);
    temp.set_len(N);
    temp
}
在添加任何元素之前,我需要我的 Vector 大小为 N。
查看文档:
我有点困惑。文档说这with_capacity不会改变长度,并set_len说调用者必须确保向量具有适当的长度。那么这样安全吗?
我需要这个的原因是因为我正在寻找一种方法来声明&mut [T]大小为 N的可变缓冲区 ( ) 并且Vec似乎最适合该法案。我只是想避免让我的类型实现vec![0;n]会带来的克隆。
文档只是有点模棱两可。措辞可以更好。您的代码示例与以下堆栈等效项一样“安全”:
let mut arr: [T; N] = mem::uninitialized();
这意味着只要您在读取数组元素之前写入它就可以了。如果你在写作之前阅读,你就会打开通往鼻腔恶魔和记忆不安全的大门。
我只是想避免 vec![0;n] 带来的克隆。
llvm 会将其优化为单个 memset。