[−][src]Macro sp_std::ptr::raw_const
🔬 This is a nightly-only experimental API. (
raw_ref_macros
)Create a const
raw pointer to a place, without creating an intermediate reference.
Creating a reference with &
/&mut
is only allowed if the pointer is properly aligned
and points to initialized data. For cases where those requirements do not hold,
raw pointers should be used instead. However, &expr as *const _
creates a reference
before casting it to a raw pointer, and that reference is subject to the same rules
as all other references. This macro can create a raw pointer without creating
a reference first.
Example
#![feature(raw_ref_macros)] use std::ptr; #[repr(packed)] struct Packed { f1: u8, f2: u16, } let packed = Packed { f1: 1, f2: 2 }; // `&packed.f2` would create an unaligned reference, and thus be Undefined Behavior! let raw_f2 = ptr::raw_const!(packed.f2); assert_eq!(unsafe { raw_f2.read_unaligned() }, 2);