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

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

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

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

 

先來(lái)說(shuō)明一下下面使用到的詞匯:

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

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

 

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

引用: 以r開(kāi)頭,緊跟接類(lèi)型縮寫(xiě),如 float& rf。

指針: 以p開(kāi)頭,緊跟接類(lèi)型縮寫(xiě),如 float* pf, const float* pcf, float* const pfc。

 

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

Android培訓(xùn),安卓培訓(xùn),手機(jī)開(kāi)發(fā)培訓(xùn),移動(dòng)開(kāi)發(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
        
		

網(wǎng)友評(píng)論