offsetof

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

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

type 不是标准布局类型,则行为未定义。

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

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

目录

异常

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)
检查是否是一个标准布局类型
(类模板)
offsetofC 文档

版本历史

  • (当前 | 先前 2017年3月19日 (日) 06:44Fruderica讨论 | 贡献. . (1,741字节) (-251). . (撤销)
  • 当前 | 先前 2014年10月26日 (日) 18:18P12bot讨论 | 贡献 . . (1,992字节) (0). . (Fix some translations) (撤销)
  • 当前 | 先前 2013年7月2日 (二) 11:54P12bot讨论 | 贡献 . . (1,992字节) (-65). . (Use {{lc}}. Update links. Various fixes.) (撤销)
  • 当前 | 先前 2012年11月2日 (五) 14:20P12bot讨论 | 贡献 . . (2,057字节) (+209). . (r2.7.3) (机器人添加:de, en, es, fr, it, ja, pt, ru) (撤销)
  • 当前 | 先前 2012年10月27日 (六) 12:43P12讨论 | 贡献 . . (1,848字节) (0). . (1个修订: Translate from the English version) (撤销)
  • 当前 | 先前 2012年10月26日 (五) 06:00TranslationBot讨论 | 贡献. . (1,848字节) (-54). . (Translated from the English version using Google Translate) (撤销)
  • 当前 | 先前 2012年10月26日 (五) 04:09P12讨论 | 贡献 . . (1,902字节) (0). . (1个修订: Translate from the English version) (撤销)
  • 当前 | 先前) 2012年10月25日 (四) 12:00TranslationBot讨论 | 贡献. . (1,902字节) (+1,902). . (Translated from the English version using Google Translate)