E0072
递归类型的大小是无限的,因为它没有间接。
错误代码示例:
struct ListNode {
head: u8,
tail: Option<ListNode>, // error: 没有间接性所以不能计算类型的大小。
}
在定义递归结构或枚举体时,任何在其内部定义的类型都必须在指针之后产生(如 Box ,& 或 Rc)。这是因为结构或枚举体必须有确定的大小,如果没有指针,类型的大小就会是无限制的。
在本例中,类型没有确定的大小,因为它可以无限大(因为我们可以将 ListNodes 嵌套到任意深度)具体地说,
size of `ListNode` = 1 byte for `head`
+ 1 byte for the discriminant of the `Option`
+ size of `ListNode`
解决此问题的一个方法是将 ListNode 包装进 Box , 像这样:
struct ListNode {
head: u8,
tail: Option<Box<ListNode>>,
}
因为 Box 是一个指针,所以其大小是已知的,所以整个结构体大小都是已知的。
本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。