继续反汇编系列,本次使用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++代码编译成汇编代码后,引用和指针同样是一个指向内存地址的存储体(一般是内存单元,或优化后使用寄存器,存放指向的内存地址)。

Android培训,安卓培训,手机开发培训,移动开发培训,云培训培训

    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
        
		

网友评论