1. 程式人生 > >C++知識分享:一種C++函式的過載機制

C++知識分享:一種C++函式的過載機制

一種C++函式過載機制

這個機制是由張素琴等人提出並實現的,他們寫了一個C++的編譯系統COC++(開發在國產機上,UNIX作業系統環境下具有中國自己版權的C、C++和FORTRAN語言編譯系統,這些編譯系統分別滿足了ISOC90、AT&T的C++85和ISOFORTRAN90標準)。COC++中的函式過載處理過程主要包括兩個子過程:

1、在函式宣告時的處理過程中,編譯系統建立函式宣告原型連結串列,按照換名規則進行換名並在函式宣告原型連結串列中記錄函式換名後的名字(換名規則跟本文上面描述的差不多,只是那個int-》為哪個字元、char-》為哪個字元等等類似的差異)


有興趣一起交流學習c++的小夥伴可以加群:941 63 6044

圖附1、過程1-建立函式連結串列(說明,函式名的編碼格式為:<原函式名>_<作用域換名><函式引數表編碼>,這跟g++中的有點不一樣)

2、在函式呼叫語句翻譯過程中,訪問符號表,查詢相應函式宣告原型連結串列,按照型別匹配原則,查詢最優匹配函式節點,並輸出換名後的名字下面給出兩個子過程的演算法建立函式宣告原型連結串列演算法流程如圖附1,函式呼叫語句翻譯演算法流程如圖附2。


附-模板函式和普通函式構成的過載,呼叫時又是如何匹配的呢?

下面是C++創始人Bjarne Stroustrup的回答:

1)Find the set of function template specializations that will take part in overload resolution.

2)if two template functions can be called and one is more specified than the other, consider only the most specialized template function in the following steps.

3)Do overload resolution for this set of functions, plus any ordinary functions as for ordinary functions.

4)If a function and a specialization are equally good matches, the function is perferred.

5)If no match is found, the call is an error.