函式過載:c++允許在同一作用域中宣告幾個功能類似的同名函式,這些同名函式的形參列表(引數個數 或 型別 或 順序)必須不同,常用來處理實現功能類似資料型別不同的問題。
c/c++中程式執行起來,需要經歷一下幾個階段:
在鏈結時,面對add函式,func函式,每個編譯器都有自己的函式名修飾規則。聯結器會使用哪個名字去找呢?
下面通過在linux下gcc和g++的修飾規則,演示這個修飾後的名字
結論:在linux下,採用g++編譯完成後,函式名字的修飾發生改變,編譯器將函式引數型別資訊新增到修改後的名字中。函式修飾後變成:【_z+函式長度+函式名+型別首字母】
總結:c語言沒辦法支援過載,因為同名函式沒辦法區分。而c++是通過函式修飾規則來區分,只要引數不同,修飾出來的名字就不一樣,就支援了過載。
需要注意的是:引數本身是不是const對函式過載沒有影響,影響的引數指向的型別。
如以下這兩對都不是函式過載:
a:
intcal
(int a,
int b)
;int
cal(
intconst a,
intconst b);b:
intcal
(int
* a,
int*b)
;int
cal(
int*
const a,
int*
const b)
;
而以下這一對是函式過載:
c:
intcal
(int
* a,
int* b)
;int
cal(
const
int* a,
const
int* b)
為什麼C 支援函式過載而C語言不支援?
gcc和g 編譯的過程類似,細節處理不一樣 list.h list.c test.c 1.預處理 標頭檔案的展開 巨集替換 條件編譯 去掉注釋 list.i test.i 2.編譯 檢查語法錯誤 生成彙編 list.s test.s 3.彙編 將彙編 轉換成對應的機器 list.o test.o 4...
C 為什麼C 支援函式過載而C語言不支援
double add double left,double right long add long left,long right 例如上面的 add函式的函式名字重複,但引數不同 包括引數的個數 型別不同 的函式。這種情況在c語言的編譯中是不通過的,但c 卻可以。接下來我們來講解原因 實際我們的專...
C 筆記 C語言為什麼不能函式過載
函式過載 一 1 原因 c語言不能函式過載與函式編譯後函式名有關。2 c語言編譯後的 名稱為 函式名 c語言 int add int a,int b 這裡是有意只給宣告不給定義,int add int a,char b 出錯後會在顯示框顯示編譯後的函式名 int add char a,int b i...