日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

《深度探索C++对象模型》--4 Function语意学

發布時間:2025/3/21 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《深度探索C++对象模型》--4 Function语意学 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


1member的各種調用方式

1nonstaticmember functions

C++的設計準則之一就是:非靜態成員函數至少必須和一般的非成員函數有相同的效率,編譯器內部將成員函數轉換為對等的非成員函數實體。通過安插this指針和mangling等完成。

2namemangling(名字的特殊處理)

使名字獨一無二,函數的signature為函數名稱+參數個數+參數類型;

3virtualmember functions

通過vptr來調用。有時inline會極大地提高效率。

4staticmember function

注意一個問題:如果class設計staticdata member聲明為nonpublic,那么必須提供一個member function 來存取該member,雖然可以不依靠classobject來存取staticmember,但存取函數必須綁定于一個classobject上。此時引入了staticmember function

主要特性是沒有this指針。注意它不能直接存取nonstatic members;不能被聲明為constvolatilevirtual;不需要經由classobject才被調用(但是可以)。

對其取地址,得到的是在內存中的地址,是一個nonmember函數的指針。

2virtual function members

1)單一繼承時

當一個類派生自另一個類,一共會有三種可能:

它可以繼承base class所聲明的virtualfunctions的函數體,正確的說是該函數體的地址被拷貝到derivedclassvirtualtable相對應的slot之中;

它可以使用自己的函數體,這表示它自己的函數體地址必須放在對應的slot之中;

它可以加入一個新的virtual function,此時virtualtable的尺寸會增大一個slot,新的函數體地址會被放進該slot之中。

2)多重繼承時

一個derivedclass內含n-1個額外的virtualtablen表示上一層baseclasses的個數),一個主要的與最左端的base class共享,其他的依次與其他base class的有關。

3)虛擬繼承時

建議不要在virtualbase class中聲明nonstaticdata members

3、指向member function的指針

1)復習成員函數指針:

指向類的非靜態成員指針在聲明時必須指明classobject

double(Point::*pmf)();//聲明,指出返回值類型,類名稱,參數列表

double(Point::*cord)() = &Point::x; //初始化,賦值通過&取地址

2)支持“指向virtualmember functions”的指針

虛擬機制仍然能夠在使用“指向memberfunction之指針”的情況下運行;對一個virtualmember function取地址,所得到的是其在virtualtable的索引值。

對于如何區分內存地址還是vtbl的索引?采用一種基于假設繼承體系中最多只有128virtualfunctions的方法。(即首位是1還是0

3)多重繼承之下,指向member functions的指針

對于通過memberfunctions指針來調用的操作,需要導入一個vcall thunk。函數指針地址要么是真正的member function地址(nonvirtual時),要么是vcallthunk的地址。vcall thunk會選出并調用相關vtbl中適當的slot

4Inline Functions

1)用inline來完成setget操作很高效。

2inline實現中,對于面對會帶來副作用的實際參數,編譯器通常會引入臨時對象;如果實際參數是一個常量表達式,會在替換之前先進行求值操作,后續的inline時直接將常量綁定;如果不是上述兩點就直接替換。

3)如果inline函數中有許多局部變量,則會產生巨多臨時對象,這影響效率,要注意。

總結

以上是生活随笔為你收集整理的《深度探索C++对象模型》--4 Function语意学的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。