offsetof
来自cppreference.com
该页由英文版wiki使用Google Translate机器翻译而来。
该翻译可能存在错误或用词不当。鼠标停留在文本上可以看到原版本。你可以帮助我们修正错误或改进翻译。参见说明请点击这里. |
在头文件 <cstddef> 中定义
|
||
#define offsetof(type, member) /*implementation-defined*/ |
||
宏offsetof扩展类型std::size_t,,它的值的偏移量,以字节为单位,从一个指定类型的对象的开始到其指定的部件,包括填充物,如果没有..恒定
原文:
The macro offsetof expands to a constant of type std::size_t, the value of which is the offset, in bytes, from the beginning of an object of specified type to its specified member, including padding if any.
目录 |
[编辑] 注释
type
是不是一个标准的布局类型,其行为是未定义.原文:
If
type
is not a standard-layout type, the behavior is undefined.member
是一个静态成员或函数成员,该行为是未定义.原文:
If
member
is a static member or a function member, the behavior is undefined.一个标准的布局类型的第一个成员的偏移量始终为零(空基的优化是强制性的)
原文:
The offset of the first member of a standard-layout type is always zero (空基的优化 is mandatory)
[编辑] 可能的实现
#define offsetof(type,member) ((std::size_t) &(((type*)0)->member)) |
[编辑] 示例
#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) |
检查是否是一个标准布局类型 (类模板) |