ggh*_*voc 0 arrays string slice rust
据我了解,&[T]类型是一个“胖”指针(内存地址和大小)而不是切片本身[T],而是被引用的实际切片。但是为什么他们没有[T]在下面的上下文中犯语法错误呢?
let y: [i32; 6] = [1, 2, 3, 4, 5, 6];
// let z: [i32] = y[..]; // error: the size for values of type `[i32]` cannot be known at compilation time
let z: &[i32] = &y[..]; // OK
// let v: str = "Hello World"; // the size for values of type `str` cannot be known at compilation time
Run Code Online (Sandbox Code Playgroud)
从错误:[i32] cannot be known at compilation,这只是一个错误,让我,用户,理解为什么这种语法是不可能的,还是因为我没有正确使用这种语法并且它在某些上下文中有效?
编辑:修正错别字
因为它是可以使用未分级的类型,如str,[T]以及dyn MyTrait在某些情况下。
目前最常见的是泛型。你可以,例如,有一个Box<[T]>或Box<str>,Arc<[T]>或任何常规用?Sized绑定。
还有一些正在开发的功能使用此类未调整大小的类型:
struct使用一个未调整大小的字段定义 a ,从而使结构本身未调整大小。不过目前相当无用,因为您实际上无法创建这样的结构。