Macro std::mem::offset_of

source ·
pub macro offset_of($Container:ty, $($fields:tt).+ $(,)?) {
    ...
}
🔬This is a nightly-only experimental API. (offset_of #106655)
Expand description

从给定类型的开头扩展到字段的偏移量 (以字节为单位)。

仅支持结构体、unions 和元组。

可以使用嵌套字段访问,但不能使用像 C 的 offsetof 中那样的数组索引。

注意这个宏的输出是不稳定的,#[repr(C)] 类型除外。

Examples

#![feature(offset_of)]

use std::mem;
#[repr(C)]
struct FieldStruct {
    first: u8,
    second: u16,
    third: u8
}

assert_eq!(mem::offset_of!(FieldStruct, first), 0);
assert_eq!(mem::offset_of!(FieldStruct, second), 2);
assert_eq!(mem::offset_of!(FieldStruct, third), 4);

#[repr(C)]
struct NestedA {
    b: NestedB
}

#[repr(C)]
struct NestedB(u8);

assert_eq!(mem::offset_of!(NestedA, b.0), 0);
Run