在C++中,我可以将1000个数组int
放到堆上,如下所示:
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强制在编译时知道所有数组的大小,并且在创建数组时不允许使用表达式.
Rust中的数组是固定长度的.如果您想要一个动态大小的数组,请使用Vec
.在这种情况下,最简单的方法是使用vec!
宏:
let size = 1000; let values = vec![0; size];
此外,如果您非常担心Vec
长度为三个字,并且在创建后不需要调整存储大小,则可以明确地丢弃内部容量,并values
在堆栈中调低两个字:
let values = values.into_boxed_slice(); // returns a Box<[i32]>.