2
如果我写一个函数,[f32]
类型(而不是如&[f32]
)的一个说法,我得到一个错误:为什么我不能写一个与Box :: new相同类型的函数?
the trait bound `[f32]: std::marker::Sized` is not satisfied
文档说,这是因为[f32]
没有编译时,已知尺寸。一个合理的限制。很公平。
但是,此类型的标准库中至少有一个函数。这里是我这样称呼它:
let b: Box<[f32]> = Box::new([1.0, 2.0, 3.0]);
这是怎么来的标准库,而不是在我的代码?有什么相关的区别? (the source没有明显的魔法)。
我给了'b'一个明确的类型。这不确定Box实例化的类型吗? – apt1002
@ apt1002该类型约束会导致“Box <[f32; 3]>'强制为”Box <[f32]>'。你可以通过尝试使用明显不正确的类型来证明这一点:'let b:()= Box :: new([1.0,2.0,3.0]);'会产生一个错误,告诉你右边是'Box <[{浮}; 3]>(因为浮点文字在这一点上没有任何特定的浮点类型)。 –
*它的大小是一个引用* - >否,它是一个胖指针,所以它的大小是指针大小的两倍。 –