在C++中,我可以像这样将一个1000 int
s的数组放在堆上:
int size = 1000;
int* values = new int[size];
delete[] values;
我不知道如何在Rust中做同样的事情。
let size = 1000;
let values = Box::new([0; size]) // error: non-constant path in constant expression
据我所知,Rust强制所有数组的大小在编译时已知,并且不允许在创建数组时使用表达式。
4条答案
按热度按时间umuewwlo1#
Rust的堆分配数组是
std::Vec
。在引擎盖之下,它只是一个数组(阅读文档中的**§保证**:https://doc.rust-lang.org/std/vec/struct.Vec.html#guarantees)要分配未初始化的内存,请使用
Vec::with_capacity()
。然后根据需要push()
值:pdtvr36n2#
如果你想要一个数组在堆(e.例如,
Box<[u8; 100]>
)而不是切片(例如,例如Box<[u8]>
),那么从Rust 1开始。66你可以使用Box的TryFrom<Vec<T>>
从一个与数组大小相同的Vec转换。如果容量也匹配,则没有拷贝。62lalag43#
如果数组的大小可以在编译时确定 *,可以使用这样的常量:
const fn
中支持46个控制流和循环。bxjv4tth4#
Rust中的数组是固定长度的。如果你想要一个动态大小的数组,使用
Vec
。在这种情况下,最简单的方法是使用vec!
宏:此外,如果你非常担心
Vec
的长度为三个单词,并且在创建后不需要调整存储大小,你可以显式地放弃内部容量,并将values
在堆栈上减少到两个单词: