我最近遇到过这段代码并认为这有点矫枉过正。
struct Structure {
unsigned int first;
unsigned int last;
};
(std::size_t)&((Structure *)0)->last; // 4
所以我想知道我是否可以安全地做到:
sizeof(unsigned int); // 4
而不是:
(std::size_t)&((Structure *)0)->last; // 4
或者代码正在做什么,如果它好得多。
修改
https://stackoverflow.com/a/1379370/1001563中指出的代码或多或少与offsetof
相符
如果您知道自己在寻找什么,那就找到答案而不必询问。感谢@VladfromMoscow
答案 0 :(得分:3)
程序通常会被更改。所以最好使用一般方法。例如,首先可以更改数据成员的类型,或者在数据成员最后一次可以添加一个数据成员之前。
请注意,在<stddef.h>
(或C ++中的<cstddef>
)中定义的C中已存在类似的宏
offsetof(type, member-designator)