C++ 参考手册

定义于头文件 <cstddef>
#define offsetof(type, member) /*implementation-defined*/

offsetof 展开成 std::size_t 类型的整数常量表达式,其值是从指定类型对象开始到其指定成员的字节数偏移,若有填充字节则包括之。

type 不是标准布局类型,则行为未定义 (C++17 前)条件性支持 offsetof 宏的使用 (C++17 起)

memberstatic 成员成员函数,则行为未定义。

标准布局类型的首个成员的偏移始终是零(空基类优化是强制的)。

表达式 offsetof(type, member) 决不依赖类型,而且它依赖值当且仅当 type 为依赖的。

异常

offsetof 不抛出异常;表达式 noexcept(offsetof(type, member)) 始终求值为 true

注意

offsetof 不能以标准 C++ 实现,并要求编译器支持: GCCLLVM

示例

#include <iostream>
#include <cstddef>
struct S {
    char c;
    double d;
};
int main()
{
    std::cout << "the first element is at offset " << offsetof(S, c) << '\n'
              << "the double is at offset " << offsetof(S, d) << '\n';
}

可能的输出:

the first element is at offset 0
the double is at offset 8

参阅

sizeof 运算符返回的无符号整数类型
(typedef)
检查是否是一个标准布局类型
(类模板)