| r[type.slice] |
| # Slice types |
| |
| r[type.slice.syntax] |
| ```grammar,types |
| SliceType -> `[` Type `]` |
| ``` |
| |
| r[type.slice.intro] |
| A slice is a [dynamically sized type] representing a 'view' into a sequence of |
| elements of type `T`. The slice type is written as `[T]`. |
| |
| r[type.slice.unsized] |
| Slice types are generally used through pointer types. For example: |
| |
| * `&[T]`: a 'shared slice', often just called a 'slice'. It doesn't own the |
| data it points to; it borrows it. |
| * `&mut [T]`: a 'mutable slice'. It mutably borrows the data it points to. |
| * `Box<[T]>`: a 'boxed slice' |
| |
| Examples: |
| |
| ```rust |
| // A heap-allocated array, coerced to a slice |
| let boxed_array: Box<[i32]> = Box::new([1, 2, 3]); |
| |
| // A (shared) slice into an array |
| let slice: &[i32] = &boxed_array[..]; |
| ``` |
| |
| r[type.slice.safe] |
| All elements of slices are always initialized, and access to a slice is always |
| bounds-checked in safe methods and operators. |
| |
| [dynamically sized type]: ../dynamically-sized-types.md |