我在互联网上读到了这个偏移宏,但它没有解释它的用途.
#define offsetof(a,b) ((int)(&(((a*)(0))->b)))
Run Code Online (Sandbox Code Playgroud)
它想做什么以及使用它有什么好处?
我刚才因为这个问题而学到了这个,标准是std::complex(26.4 [complex.numbers]):
4如果
z是cv 类型的左值表达式,std::complex<T>则:
- 表达式reinterpret_cast<cv T(&)[2]>(z)应格式良好,
-reinterpret_cast<cv T(&)[2]>(z)[0]应指定的实部z,并且
-reinterpret_cast<cv T(&)[2]>(z)[1]应指定虚部z.
此外,如果a是类型为cv 的表达式,std::complex<T>*并且表达式a[i]是为整数表达式定义的i,则:
-reinterpret_cast<cv T*>(a)[2*i]应指定的实部a[i],并且
-reinterpret_cast<cv T*>(a)[2*i + 1]应指定虚部a[i].
这是我真正想要以符合标准的方式利用的东西.有些时候我有POD,比如数学向量,它们由单一数据类型组成.这是两个示例类:
template <typename T, unsigned N>
struct Vector
{
T v[N];
};
template <typename T>
struct Quaternion
{
T r, i, …Run Code Online (Sandbox Code Playgroud)