이 코드는 어떻게됩니까? 표준입니까? 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
편집 : 내가 전에이 코드를 본 곳 그냥 기억했다. 그것은 안으로있다 WinNT.h
#define FIELD_OFFSET(type, field) ((LONG)(LONG_PTR)&(((type *)0)->field))
' '에 정의 된'offsetof (structure, field)'매크로가 있습니다. 그래서 예, 코드는 유효하지만 표준 매크로를 사용하면 표준이됩니다. –
DyZ
TL; DR : 구현은 이와 같은 작업을 수행 할 수 있지만 수행 할 수는 없습니다. –
내가 할 수 없다는 것은 무엇을 의미합니까, 할 수 있습니다, 제 프로그램이 작동합니다. – nikau6