函數重載

函數重載:

函數重載是函數的一種特殊情況,c++允許在同一作用域下聲明幾個同名函數,但是整幾個同名函數的形參列表必須不相同(參數個數不同,參數的類型(對應位置的參數),順序也不相同)

返回值不一樣不能視爲函數重載

 

 

爲什麼c++支持函數重載?而c語言不行?

 

首先我們看一下編譯的過程:預處理:頭文件展開/去註釋/宏替換  test.i

                                          編譯:檢查語法                               test.s

                                          彙編:轉換成機器碼                         test.o

                                          鏈接:將各個.c文件糅合到一起編譯   a.out

在來看一個例子

在這個代碼中如果這個文件是一個.c 那麼這個文件肯定是編譯不過去的 ,肯定會報錯,這是因爲C語言與c++的函數名修飾規則不同

 

函數名修飾規則:函數的名字修飾(Decorated Name)就是編譯器在編譯期間創建的一個字符串,用來指明函數的定義或原型

如果函數名字,調用約定,返回值類型或函數參數有任何改變,原來的名字修飾就不再有效,必須指定新的名字修飾

我們可以先看一下c++語言的函數命名規則:函數名(括號裏是地址)

在LINUX系統下實測

 

我們很明顯的看到c++裏的首先是_,Z是符號表的開始,4是函數名的長度,ii是兩個參數的類型的第一個字母,因爲Func函數眉頭參數則直接是void型

 

我們再來看一下c的命名規則我們可以很明顯的看到func1函數之前加了一個_(括號裏依舊是地址)

栗子

 

我們很明顯的看到直接就是Func無任何修飾

 

發佈了55 篇原創文章 · 獲贊 17 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章