Как насчет этого кода, он стандартный? Я видел такой код в заголовке Visual C++, он может вычислять смещения некоторых членов структуры, но как это работает?Рассчитать смещения элементов структуры без создания экземпляра
#include <iostream>
struct Foo
{
int a;
int b;
int c;
};
int main(int argc, char** argv)
{
int* i1 = (&((Foo*)0)->a);
int* i2 = (&((Foo*)0)->b);
int* i3 = (&((Foo*)0)->c);
std::cout << "i1 = " << i1 << "\ni2 = " << i2 << "\ni3 = " << i3 << "\n";
return 0;
}
Results : i1 = 0, i2 = 4, i3 = 8
Edit: Просто вспомнил, где я видел этот код раньше. Он находится в WinNT.h
#define FIELD_OFFSET(type, field) ((LONG)(LONG_PTR)&(((type *)0)->field))
Существует стандартный макрос 'offsetof (структура, поле)', определенный в '', что делает именно это. Так что да, код действителен, но использование стандартного макроса сделает его более стандартным. –
DyZ
TL; DR: Реализация может делать такие вещи, вы не можете. –
Что вы имеете в виду, я не могу, я могу это сделать, моя программа работает. – nikau6