Skip to content
12 changes: 12 additions & 0 deletions src/expressions/operator-expr.md
Original file line number Diff line number Diff line change
Expand Up @@ -360,6 +360,18 @@ Here `*T` means either `*const T` or `*mut T`.
* `char` casts to the value of the code point, then uses a numeric cast if needed.
* `u8` to `char` cast
* Casts to the `char` with the corresponding code point.
* Pointer to address cast
* Casting from a valid raw pointer to `usize` will produce the address that is pointed to.

The pointer's provenance is lost in this conversion.
* Address to pointer cast
* Casting from `usize` to a raw pointer will produce a raw pointer to the same location as the original pointer, if the `usize` was obtained through a pointer to address cast of a valid pointer.

<div class="warning">
Warning:
The two pointers are not equivalent.
Dereferencing the pointer obtained from the address to pointer cast may be <a href="../behavior-considered-undefined.md">undefined behavior</a> if aliasing rules are not followed.
</div>

\* if integer-to-float casts with this rounding mode and overflow behavior are
not supported natively by the hardware, these casts will likely be slower than
Expand Down