什麼是函式傾軋(name mangling)?

2022-06-09 09:39:09 字數 628 閱讀 4084

函式傾軋: 同名不同參函式(過載函式),c++底層如何區分他們,那就是對函式改名,也就是中文翻譯的「傾軋」(苦澀難懂的詞),改名也是有規律的,不是隨便命名,具體參見下面:

函式過載:在相同作用域中的多個函式,具有相同的名字而形參表不同。

不能僅僅基於不同的返回型別而實現函式過載。返回值是不影響函式簽名的。

c++函式過載底層實現原理是c++利用name mangling(傾軋)技術,來改名函式名,區分引數不同的同名函式。

編譯器通過函式名和其引數型別識別過載函式。為了保證型別安全的連線(type-safe linkage),編譯器用引數個數和引數型別對每乙個函式識別符號進行專門編碼,這個過程有時稱為「名字改編」(name mangling)或「名字修飾」(name decoration)。型別安全的連線使得程式能夠呼叫合適的過載函式並保證了引數傳遞的一致性。編譯器能夠檢測到並報告連線錯誤。

objdump -t檢視符號表

名字改編轉化成函式名

參考:

什麼是函式

從數學到程式設計,了解什麼是函式!函式 function 的定義通常分為傳統定義和近代定義,函式的兩個定義本質是相同的,只是敘述概念的出發點不同,傳統定義是從運動變化的觀點出發,而近代定義是從集合 對映的觀點出發。函式的近代定義是給定乙個數集a,假設其中的元素為x,對a中的元素x施加對應法則f,記作...

什麼是函式?

1 函式是乙個可以多次使用的功能 塊,乙個封閉的 空間 它可以在 裡隨意呼叫。利用函式的封裝可以減少重複 的開發,提高 的利用率。函式可以傳參,利用函式內預先定義的內容對傳入的不同資料引數進行處理。2 函式也是物件,也可以為值,它可以存在於變數,陣列和物件之中。3 函式可以當參傳遞給函式,並且由函式...

什麼是函式

在7.1章的學習中,作者挑戰了不引用相應的標頭檔案而呼叫函式。一開始,我自然是不知道如何運作的,只能把三個流程打出來,才慢慢認識到作者在幹什麼以及函式的本質 這個函式十分簡單,只要呼叫了標頭檔案string.h,就可以便捷的使用strcmp函式,比較大小。但如果沒有這個標頭檔案呢?在這裡插入描述 在...