int i1 = 1, i2 = 2;
int& ir = i1;
int* ip = &i2;
void* vp = (void*)((size_t&)(ip));
00DF3CC4 mov eax,dword ptr [ip]
00DF3CC7 mov dword ptr [vp],eax
void* vp1 = (void*)((size_t&)(i1));
00DF3CCA mov eax,dword ptr [i1]
00DF3CCD mov dword ptr [vp1],eax
void* p1 = (void*)(((size_t&)(IntTT::TV)));
00DF3D36 mov eax,offset IntTT::`vcall'{4}' (0DF121Ch)
00DF3D3B mov ecx,dword ptr [eax]
00DF3D3D mov dword ptr [p1],ecx
void* p2 = (void*)(&((size_t&)(IntTT::TV)));
00DF3D43 mov dword ptr [p2],offset IntTT::`vcall'{4}' (0DF121Ch)
引用内存中存储的数据就相当于指针。
对于引用取地址,相当于是取引用的内容。对于引用取内容相当于是取引用内容的内容。
为什么call都是call到一条jmp指令?
因为在编译,链接过程中会先生成符号表。然后链接的时候把符号表和具体的代码关联。所有代码都会由这里跳转。
release版本会优化掉。
为什么函数指针的强转和普通指针的强转不同?
待解