定义于头文件
<cstddef>
|
||
#define offsetof(type, member) /*implementation-defined*/
|
||
宏 offsetof 展开成 std::size_t 类型的整数常量表达式,其值是从指定类型对象开始到其指定成员的字节数偏移,若有填充字节则包括之。
若 type
不是标准布局类型,则行为未定义。
若 member
是 static 成员或成员函数,则行为未定义。
标准布局类型的首个成员的偏移始终是零(空基类优化是强制的)。
目录 |
offsetof
不抛出异常;表达式 noexcept(offsetof(type, member)) 始终求值为 true 。
offsetof
要求如上工作,即使一元 operator&
对任一涉及的类型被重载。这无法通过标准 C++ 实现,并要求编译器支持。
#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) |
|
(C++11)
|
检查是否是一个标准布局类型 (类模板) |
offsetof的 C 文档
|