C 函式過載語法與實現原理

2021-10-08 22:05:47 字數 1229 閱讀 1786

函式過載為了使函式名字方便使用

在c語言中,函式名必須是唯一的,程式不允許出現同名的函式。在c++中是允許出現同名函式的,這種現象稱為函式過載。

函式過載的目的為了方便的使用函式名

實現函式過載的條件

同乙個作用域

引數個數不同

引數型別不同

引數順序不同

namespace a

void

test

(int a)

void

test

(char b)

//引數型別不同發生過載

void

test

(int a,

char b)

//引數個數不同發生過載

void

test

(char b,

int a)

//引數順序不同發生過載

}namespace c

//int test01(int a) //錯誤

//函式過載無法按返回值區分

}

函式過載和預設引數一起使用時,要注意二義性產生的問題

void

test02

(int a)

void

test02

(int a,

int b =

100)

intmain()

當編譯器能從**中確定唯一函式時,如int temp = fun(); 這不會出錯。然而,我們編寫**時可以忽略函式返回值。那麼這時候,如果乙個函式為void test(int a):和int test(int a);當呼叫test(10);這時編譯器不知道呼叫哪個函式。所以禁止使用返回值作為函式過載條件。

c++為了實現函式過載,編譯器做了一些事情,編譯器會給不同的引數型別取乙個別名,來區分函式,比如void test();編譯器可能會將函式修飾_test,當碰到void test(int a);可能修飾為_test_int,當碰到void test(int a, char b);可能修飾為_test_int_char。這使用「可能」這個字,不同編譯器會產生不同效果

我們可以進行檢視

1.win+r 輸入cmd開啟控制台

2.找到.cpp檔案所在目錄

3.生成彙編檔案 g++ -s test.cpp -o test01.s (test為檔名)

4.檢視內容 type 檔名

C 函式過載的實現原理

對於c 來說,多個函式可以同名,但是這些函式的引數型別必須不一樣,也就是說c 中相同的函式名函式引數不同代表了不同的函式,當你去呼叫這些函式時,編譯器可以根據你的傳入引數的型別去判斷你呼叫的是哪個函式。但是c 編譯器是怎麼實現的呢?先看看c對於函式的處理 執行命令 gcc s main c.c o ...

c 函式過載的實現原理

1.c 問什麼引入函式過載 在c語言中,如果我們寫兩個函式名相同的函式,編譯器會告訴我們,函式重定義的錯誤。我們還會遇到下面這個問題 如果我們寫乙個計算int型別的加法,另乙個計算double型別的加法,我們必須起兩個不同的函式名。而在c 中我們可以解決這兩個問題。我們可以用相同的函式名,只有引數列...

C 語法之函式過載

所謂函式過載是指同乙個函式名可以對應著多個函式的實現。例如,可以給函式名add 定義多個函式實現,該函式的功能是求和,即求兩個運算元的和。其中,乙個函式實現是求兩個int型數之和,另乙個實現是求兩個浮點型數之和,再乙個實現是求兩個複數的和。每種實現對應著乙個函式體,這些函式的名字相同,但是函式的引數...