Skip to content

Commit 7c2ddff

Browse files
udoprogRalfJung
andauthored
Update src/expressions/operator-expr.md
Co-authored-by: Ralf Jung <[email protected]>
1 parent fd8b144 commit 7c2ddff

File tree

1 file changed

+10
-0
lines changed

1 file changed

+10
-0
lines changed

src/expressions/operator-expr.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -482,6 +482,16 @@ assert_eq!(values[1], 3);
482482

483483
`*const T` / `*mut T` can be cast to `*const U` / `*mut U` with the following behavior:
484484

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)`.
485495
- If `T` is unsized and `U` is sized, the cast discards all metadata that
486496
completes the wide pointer `T` and produces a thin pointer `U` consisting
487497
of the data part of the unsized pointer.

0 commit comments

Comments
 (0)