Why is assigning an integer value from a vector to another variable allowed in Rust?
(1个答案)
在10个月前关闭。
简要地说,某些数据类型存储在堆栈中,因为编译器知道它们在运行时将需要多少内存。其他数据类型更灵活,并存储在堆中。数据的指针停留在堆栈上,指向堆数据。
我的问题是,如果Vec数据在堆上,那么如何访问i32(以及其他通常在堆栈中存储的类型),就像实际在堆栈上一样(通过索引复制)如何被访问。
换一种说法。对我来说,我不能从Vec
move
输出String,它们没有实现Copy,并且通常是
move
,这对我来说很有意义。当它们是Vec的元素时,也会发生同样的情况。但是,通常会复制i32,但是当它们成为堆中矢量数据的一部分时,为什么也会发生这种情况?
如果您认为我错过了某些内容,请随时指出任何概念上的错误,并向我介绍现有 Material 。我已经阅读了Rust编程语言,并进行了一些检查。
fn main() {
// int in stack
let i: i32 = 1;
let _ic = i;
println!("{}", i);
// String on heap
let s: String = String::from("ciao cippina");
let _sc = &s;
println!("{}", s);
// array and data on the stack
let ari = [1, 2, 3];
println!("{:?}", &ari);
println!("a 0 {}", ari[0]);
// array and Pointers on the stack, data on the heap
let ars = [String::from("ciao"), String::from("mondo")];
println!("{:?}", &ars);
println!("a 0 {}", ars[0]);
// let _ars_1 = ars[0]; // ERROR, cannot move out of array
// Vec int, its Pointer on stack, all the rest on heap
let veci = vec![2, 4, 5, 6];
println!("{:?}", &veci);
println!("a 0 {}", veci[0]);
let _veci_1 = veci[0]; // NO ERROR HERE ??
// Vec string, its Pointer on stack, all the rest on heap
let vecs = vec![String::from("ciao"), String::from("mondo")];
println!("{:?}", &vecs);
println!("a 0 {}", vecs[0]);
// let _vecs_1 = vecs[0]; // ERROR, cannot move out of Vec
}
我是一名优秀的程序员,十分优秀!