繼續(xù)反匯編系列,本次使用vc2008在x86體系下分析c++中的引用。

定義一個引用類型和將一個變量轉(zhuǎn)換成引用類型一樣嗎?

引用比指針安全,真的是這樣嗎,對引用不理解的話比指針還危險(xiǎn)。

為什么要用常量引用傳參,只是為了只讀?

 

先來說明一下下面使用到的詞匯:

對象:不是OO里的對象,而是泛指在c++語言中某種類型(內(nèi)嵌,結(jié)構(gòu)體,類)的實(shí)例,與變量相同的意思。

存儲體: “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:”,對象(或變量)的存儲內(nèi)容的空間,一般是內(nèi)存。

 

下面用到的變量名命名規(guī)則:

引用: 以r開頭,緊跟接類型縮寫,如 float& rf。

指針: 以p開頭,緊跟接類型縮寫,如 float* pf, const float* pcf, float* const pfc。

 

c++代碼編譯成匯編代碼后,引用和指針同樣是一個指向內(nèi)存地址的存儲體(一般是內(nèi)存單元,或優(yōu)化后使用寄存器,存放指向的內(nèi)存地址)。

Android培訓(xùn),安卓培訓(xùn),手機(jī)開發(fā)培訓(xùn),移動開發(fā)培訓(xùn),云培訓(xùn)培訓(xùn)

    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