继续反汇编系列,本次使用vc2008在x86体系下分析c++中的引用。
定义一个引用类型和将一个变量转换成引用类型一样吗?
引用比指针安全,真的是这样吗,对引用不理解的话比指针还危险。
为什么要用常量引用传参,只是为了只读?
先来说明一下下面使用到的词汇:
对象:不是OO里的对象,而是泛指在c++语言中某种类型(内嵌,结构体,类)的实例,与变量相同的意思。
存储体: “the standard (draft 3225, section [basic.life]) which clearly states that a reference binds to storage and can outlive the object which existed when the reference was created:”,对象(或变量)的存储内容的空间,一般是内存。
下面用到的变量名命名规则:
引用: 以r开头,紧跟接类型缩写,如 float& rf。
指针: 以p开头,紧跟接类型缩写,如 float* pf, const float* pcf, float* const pfc。
c++代码编译成汇编代码后,引用和指针同样是一个指向内存地址的存储体(一般是内存单元,或优化后使用寄存器,存放指向的内存地址)。
uintptr_t uintptr = 0;0041C7F6 mov dword ptr [uintptr],0
float flt = 0.f;0041C7FD fldz 0041C7FF fstp dword ptr [flt]
float flt2 = 2.f;0041C802 fld dword ptr ds:[426C64h]
0041C808 fstp dword ptr [flt2]
float& rf = (float&)uintptr;0041


