I have the following code:
const N: usize = 10000;
const S: usize = 7000;
#[derive(Copy, Clone, Debug)]
struct T {
a: f64,
b: f64,
f: f64
}
fn main() {
let mut t: [T; N] = [T {a: 0.0, b: 0.0, f: 0.0}; N];
for i in 0..N {
t[i].a = 0.0;
t[i].b = 1.0;
t[i].f = i as f64 * 0.25;
}
for _ in 0..S {
for i in 0..N {
t[i].a += t[i].b * t[i].f;
t[i].b -= t[i].a * t[i].f;
}
println!("{}", t[1].a);
}
}
我不确定为什么数组t
必须以那种方式初始化。第一个for循环旨在使用包含结构体的值来初始化数组中对应的值。
当我试图省略直接对数组进行初始化时:
let mut t: [T; N];
我得到以下错误:
错误[E0381]: 可能使用未初始化的变量:t
所有的for循环都是按照预期的方式编写的,我只想知道是否有一种更加聪明的方法来处理数组及其与第一个for循环的初始化。
std::ptr :: write(e,t)
而不是* e = t
,是否可以消除仅限于“Copy”的限制? - ildjarnCopy
类型可以有自定义的Drop
逻辑,如果你犯了错误并丢弃了未初始化的内存,就可能导致糟糕的结果。那些不需要遵循这个建议的人,通常都已经阅读了Rustonomicon,并且不太可能需要像我这样的建议。 - DK.