Avatar ·

什么是 Rust 中的“胖指针”(fat pointer),它与普通指针有何不同?

大家好!我开始学习 Rust,遇到了术语“fat pointer”(胖指针)。书上说它是“带有额外元信息的指针”,但我一直不明白它的用途和使用场景。 我知道 Rust 中有普通引用 `&T`,它们只是指向数据。但例如切片。我写了这样的代码: ```rust fn main() { let arr = [1, 2, 3, 4, 5]; let slice: &[i32] = &arr[1..4]; println!("切片长度:{}", slice.len()); // 输出 3 } ``` 我不明白:如果我只传递指向第一个元素的引用,Rust 如何知道切片长度是 3?C/C++ 中的普通指针只存储地址,长度需要单独传递。难道 `&[i32]` 不仅仅是一个地址? 我还听说过 trait 对象,比如 `Box`。据说它们也是 fat pointers。但它们的“胖”体现在哪里?普通的 `Box` 只是一个指向堆的指针。而 `Box` 有什么特别之处呢? 请解释一下,谢谢!