C 函式過載 引用 內聯函式

2021-10-11 11:26:55 字數 2486 閱讀 8406

2、函式過載

3、引用

4、內聯函式

在宣告或定義函式時,給函式的引數設定乙個預設值,當使用者對函式進行呼叫時,如果傳遞了實參,則使用使用者傳遞的實參;如果沒有傳遞則使用預設值。

預設引數必須從右往左給出;

不能在函式宣告和定義的位置同時給出;

預設引數在提供時—常量||全域性變數;

c語言不支援。

相同作用域下,函式名字相同,引數列表必須不同(引數個數、引數型別、型別次序)。

注意:與函式的返回值型別是否相同沒關係。

編譯器在編譯**期間,需要對函式的實參型別進行推演,根據推演的結果選擇對應合適型別的函式進行呼叫。

注意:有該函式存在,則直接呼叫,如果不存在型別完全匹配的函式,則編譯器會嘗試進行隱式型別轉換,轉換完成後,如果有對應型別的函式,則進行呼叫,否則:編譯失敗(沒有對應型別、呼叫二義性)。

c++之所以能夠支援函式過載,c語言不支援函式過載,是因為c++編譯器和c語言編譯器對函式名字的修飾規則不同。

注意:不同編譯器對函式名修飾的細節可能不太相同,但大概原理是一樣的。

(1)c語言編譯器對函式名字的修飾規則:只是在函式名字前加 _

(2)c++編譯器對函式名字的修飾規則:c++編譯器將引數型別放到最終的名字中。例如:g++的修飾規則【_z+函式長度+函式名+型別首字母】

在c++出現以前,很多**都是c語言寫的,而且很底層的庫也是c語言寫的,為了更好的支援原來的c**和已經寫好的c語言庫,需要在c++中盡可能地支援c,而且在正常開發中,有些人擅長c語言,有些人擅長c++,那完全可能出現:c語言和c++混合起來程式設計。

在函式前加「extern 「c」,意思就是告訴編譯器,將該函式按照c語言規則來編譯」

extern

"c"int

add(

int left,

int right)

;int

main()

引用是乙個別名,不是新定義乙個變數,編譯器不會給引用變數重新分配空間。引用變數與其引用地實體共用同乙份記憶體空間。

1、傳值:

優點:可以對外部實參起到保護作用。

缺點:不能通過形參改變外部的實參,因為形參是實參的乙份拷貝,在函式體中,修改形參實際修改的是實參的乙份拷貝.

傳參的效率低下,而且浪費空間。

3、傳引用:

形參是實參的別名,對形參進行修改可以達到對實參的改變,對於不需要通過形參改變外部實參通過:const

傳參效率高、節省空間、**可讀性高。

注意:在c++中,一般情況下傳參時盡量使用引用。

內建型別:

如果需要通過形參改變外部的實參,盡量傳遞引用;

如果不需要通過形參改變外部的實參,使用傳值、傳引用+const

自定義型別:

傳參都是用引用, t& 和 const t&

說明:引用和指標在底層實現方式是完全相同的,引用就是按照指標的方式來實現的。

在概念和特性以及使用方式上的區別:

引用概念上定義乙個變數的別名,指標儲存乙個變數位址;

引用在定義時必須初始化,指標沒有要求;

引用在初始化時引用乙個實體後,就不能再引用其它實體,而指標可以在任何時候指向任何乙個同型別實體;

沒有null引用,但有null指標;

在sizeof中含義不用,引用結果為引用型別的大小,但指標始終是位址空間所佔位元組個數(32位平台下佔4個位元組);

引用自加即引用的實體增加1,指標自加即指標向後偏移乙個型別的大小;

有多級指標,但沒有多級引用;

訪問方式不同,指標需要解引用,引用編譯器自己處理;

引用比指標使用起來相對更安全。

優點:一改全改,**的可維護性高;常量名字具有一定的含義—#define max_size 100

缺點:巨集常量沒有型別的,不會參與到型別檢測中,**的安全性降低,而且一旦編譯報錯,報錯的位置不準確。

優點:巨集函式不是乙個真正的函式,在預處理階段,預處理器已經將巨集函式進行替換了,少了函式呼叫引數壓棧,開闢棧幀,返回等的開銷了,**的執行效率提高。

缺點:在實現時,可能會比較麻煩,要到處加括號;

#define mul(a, b) a*b

intmain()

巨集函式也沒有引數型別,不會有引數型別檢測,安全性不高;

巨集函式在預處理階段會展開,不能除錯;

巨集函式具有***。

#define max(a, b) (((a) > (b))? (a) : (b))

intmain()

1、巨集常量:const常量,可以達到巨集替換的效果,而且具有型別,更加安全。

int

main()

2、巨集函式:解決方案—內聯函式

內聯函式:在c++中被inline關鍵字修飾的函式稱為內聯函式;如果成員函式在類中定義,編譯器也可能會將其當成內聯函式來處理。

特性:

函式過載 引用 內聯函式

預設引數 在定義或者宣告乙個函式的時候,給它的形參賦上乙個預設值,呼叫這個函式的時候,如果沒有把實參傳入,函式就會使用我們指定的預設引數,如果傳入實參,就會使用傳入的引數。預設引數可分為 全預設引數 在這個函式中,給所有的形參都指定了預設值。半預設引數 在這個函式中,只給一部分的形參指定了預設值。注...

C 命名空間 函式過載 引用 內聯函式

c 關鍵字 c 98 有63個 命名空間解決了 名字衝突,有作用域的作用 命名空間的使用格式 namespace n1使用方法 1.n1 變數 2.using n1 變數 3.using namespace n1 c 的輸入輸出 標頭檔案 iostream 命名空間 using namespace ...

C 函式過載,引用,內聯函式的介紹

什麼是函式過載呢?函式過載是函式的一種特殊情況,在同一作用域中宣告幾個功能類似的同名函式,這些函式的形參列表 型別,個數,順序 必須不同。知道了函式過載的概念,那麼我們就要知道c語言的編譯的時候是如何處理函式的,首先我們要編譯c風格的 我們需要讓某些函式以c的方式編譯,在函式前面加上 extern ...