offsetof 用于非 standard layout 类型,或用于计算静态成员以及成员函数的偏移量
C++-Undefined-Behavior-88
示例:
struct T {
int* m;
T();
virtual ~T();
};
size_t s = offsetof(T, m); // Undefined behavior
例中 T 不是 standard layout 类型,用 offsetof 求成员 m 的偏移量会导致未定义的行为。
依据
ISO/IEC 14882:2003 18.1(5)-undefined
ISO/IEC 14882:2011 18.2(4)-undefined