the*_*tor 3 c++ compiler-construction
当编译器看到这段代码时:
SomeClass foo;
int x = foo.bar;
Run Code Online (Sandbox Code Playgroud)
检索bar值的过程是什么?即它看一些表示类定义的数据结构?如果是这样的数据结构是在编译时还是在运行时生成的?
编译器的地址为foo
.在该地址处,有足够的空间用于成员变量(sizeof(SomeClass)
),其中可能包含一些填充.
它知道`bar在类中的某个位置(通常是它们被声明的顺序,加上一些其他魔法,如继承),并跳转到该偏移量.
那是:
struct SomeClass
{
short s;
float f;
int bar;
char *c;
}
// pseudo-code:
&SomeClass.bar == (&SomeClass) + sizeof(short) + sizeof(float);
Run Code Online (Sandbox Code Playgroud)
在运行时,它获取该数据并将其分配给 x