File tree Expand file tree Collapse file tree 1 file changed +10
-0
lines changed Expand file tree Collapse file tree 1 file changed +10
-0
lines changed Original file line number Diff line number Diff line change @@ -482,6 +482,16 @@ assert_eq!(values[1], 3);
482
482
483
483
` *const T ` / ` *mut T ` can be cast to ` *const U ` / ` *mut U ` with the following behavior:
484
484
485
+ - If ` T ` and ` U ` are both sized, the pointer is returned unchanged.
486
+ - If ` T ` and ` U ` are both unsized, the pointer is also returned unchanged. In particular,
487
+ the metadata is preserved exactly.
488
+
489
+ For instance, a cast from ` *const [T] ` to ` *const [U] ` preserves the number of elements.
490
+ Note that, as a consequence, such casts do not necessarily preserve the size of the
491
+ pointer's referent (e.g., casting ` *const [u16] ` to ` *const [u8] ` will result in a raw
492
+ pointer which refers to an object of half the size of the original). The same
493
+ holds for ` str ` and any compound type whose unsized tail is a slice type, such
494
+ as ` struct Foo(i32, [u8]) ` or ` (u64, Foo) ` .
485
495
- If ` T ` is unsized and ` U ` is sized, the cast discards all metadata that
486
496
completes the wide pointer ` T ` and produces a thin pointer ` U ` consisting
487
497
of the data part of the unsized pointer.
You can’t perform that action at this time.
0 commit comments