我不是C ++程序员,并且在源代码中遇到以下宏定义:
// HACK: gcc warns about applying offsetof() to non-POD object or calculating
// offset directly when base address is NULL. Use 16 to get around the
// warning. gcc-3.4 has an option -Wno-invalid-offsetof to suppress
// this warning.
#define offset_of(klass,field) (size_t)((intx)&(((klass*)16)->field) - 16)
我感到困惑的事实是:
((klass*)16)->field)
将16转换为klass*
,然后插入字段field
?(intx)&(...)
按位还是使用intx
或强制转换为引用某些类型intx
?其中
intx
定义如下:typedef intptr_t intx
最佳答案
在这种情况下,&
是地址运算符,将field
的地址放在klass
类型内。
剩下的只是括号的问题,以确保您在正确的位置获得了RIGHT位,并进行了多次强制转换以确保指向field的指针是可以强制转换为size_t
的整数类型。
关于c++ - 如何理解宏定义,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48487885/