C 學習筆記 C 對C語言的函式拓展

2021-09-16 13:18:18 字數 1271 閱讀 6759

內聯函式是指用inline關鍵字修飾的函式。在類內定義的函式被預設成內聯函式。內聯函式從源**層看,有函式的結構,而在編譯後,卻不具備函式的性質

inline關鍵字只是給編譯器乙個建議,編譯器不一定會接受這種建議。一些編譯器,會將簡單的函式做內聯編譯,即使它沒有用inline關鍵字宣告

c++編譯器直接將函式體插入函式呼叫的地方

內聯函式沒有普通函式呼叫時的額外開銷(壓棧,跳轉,返回)

inline int func(int a, int b)

c++中內聯編譯的限制

不能存在任何形式的迴圈語句;

不能存在過多的條件判斷語句;

函式體不能過於龐大;

不能對函式進行取址操作;(內斂編譯後,內聯函式將不存在)

函式內聯宣告必須在呼叫語句之前。

如果存在以上衝突,c++編譯器會忽略inline關鍵字

c++支援設定預設引數,在函式呼叫的時候不賦值會使用預設值

void func(int x = 3)

如果有多個引數,預設引數要放在引數列表最後面

void func(int a, int b, int x = 3, int y = 4)

有時候在函式定義時候,會有不確定引數

此時會有佔位引數,呼叫的時候需要按位賦值

佔位引數一般用於程式的拓展和對c**的相容

int func (int x, int y, int )

佔位引數可以設定預設引數

設定預設引數以後,函式呼叫時候可以省略

int func2(int a, int b, int = 0)

c++允許函式過載

c++允許在同一範圍中宣告幾個功能類似的同名函式,但是這些同名函式的形式引數(指引數的個數、型別或者順序)必須不同,函式過載不涉及函式返回值

void myprint(int a)

void myprint(int a, char b)

當函式過載與預設函式引數時候會產生二義性

int func(int a, int b , int c= 0)

int func(int a, int b)

當使用func(1,2)呼叫函式時候,編譯器會不知道如何呼叫,會編譯失敗

C 對C的函式拓展

一,內聯函式 1.內聯函式的概念 c 中的const常量可以用來代替巨集常數的定義,例如 用const int a 10來替換 define a 10。那麼c 中是否有什麼解決方案來替代巨集 片段呢?c 中推薦使用內聯函式代替巨集 片段,c 中使用inline關鍵字宣告內聯函式。注意 內聯函式宣告時...

c 對c的拓展 函式過載

函式過載 c 中函式名可相同,可有多個函式名相同的函式存在 過載 名字相同意義不同 本質 c 編譯器根據型別來修飾函式 條件 1 同一作用域 2 引數個數 型別 順序不同 注意 1 返回值型別不能作為過載條件 2 預設引數可存在二義性,存在二義性時報錯,要避免其他二義性行為 include usin...

C語言拓展筆記

一維陣列 陣列 陣列是一組有序資料的集合,陣列中每乙個元素的型別相同,用陣列名和下標來唯一確定陣列中的元素。一維陣列的定義 型別說明符 陣列名 下標常量表示式 二維陣列 二維陣列的定義 型別說明符 陣列名 常量表示式 常量表示式 函式 1 無參函式 定義格式 資料型別 函式名 現代風格是 函式名 v...