使用 tinyvec 时,即使 ArrayVec 和 Item impl Copy

有谁知道这里发生了什么?为什么我得到

use tinyvec::ArrayVec;

#[derive(Copy, Clone)]
struct Item {
    num: i32
}

#[derive(Copy, Clone)]
struct Test {
    nums: ArrayVec<[Item; 20]>
}

fn main() {

    let mut x = Test {
        nums: ArrayVec::new()
    };

}

回答

Copy为实现ArrayVec有以下限制:

impl<A> Copy for ArrayVec<A> where
A: Array + Copy,
A::Item: Copy,
{}

在这种情况下,A[Item; 20],因此它实现Copy。然而,[Item; 20] 并不满足约束条件来实现Array

impl<T: Default> Array for [T; 20] {
// ^^^^^^^^^^

对于[Item; 20]是一个ArrayItem需要实现Default


以上是使用 tinyvec 时,即使 ArrayVec 和 Item impl Copy的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>