繼續(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)存地址)。
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