C 學習(八) 函式探幽

2021-07-11 23:44:38 字數 2186 閱讀 3293

內聯函式呼叫時無需跳到另乙個位置執行**,而是直接將**塊替換到呼叫位置,因此執行速度更快。但代價是占用了更多的記憶體。在呼叫次數多,函式比較小時適用

要使用這項特性,必須採取下列措施

- 在函式宣告前加上關鍵字inline

- 在函式定義前加上關鍵字inline

#include

//an inline function definition

inline

double square(double x);

int main()

引用是已定義變數的別名,主要用作函式的形參

1.建立引用變數

int rats;

int & rodents = rats;//引用更接近const指標

int * prodent = &rats;

&不是位址運算子,而是型別識別符號的一部分,int &是int的引用,二個變數的位址相同

引用必須在宣告的時候初始化,在改變引用時原始的值也會改變,但是位址不會變

2.按引用傳遞函式引數

允許被呼叫的函式能夠訪問呼叫函式的變數

//兩種方式都出現一次&

void swapr(int & a, int & b)

swapr(wallet1,wallet2);

3.常量引用
const

double &ra

形參中使用const能夠生成並正確使用臨時變數,因此,在不修改引數時,盡可能使用const

4.將引用用於結構

不要返回臨時變數的引用或指標

struct free_throws

;void set_pc(free_throws & ft);

free_throws & accumulate(free_throws & target, const free_throws & source);

5.將引用用於類物件

將類string、ostream、istream等類物件作為引數

6.物件、繼承和引用

幾類引用可以指向派生類物件,無需進行強制型別轉換

void file_it(ostream & os,double fo);

file_it(cout,a);

file_it(fout,b);

7.何時使用引用

對於使用傳遞的值而不作修改的函式

修改函式中資料的函式

當函式呼叫中省略實參時自動預設的乙個值

char * left(const

char * str, int n = 1, int j = 5);

要為某個引數設定預設值,必須為他後面所有引數設定預設值實參按從右到左的順序依次賦給形參

能夠使用多個同名的函式,關鍵是引數列表,返回值可以相同可以不同,但引數列表必須不同,形參中是否有引用視做同一種

unsigned

long left(unsigned

long num, unsigned ct);

char * left(const

char* str, int n);

templatevoid swap(anytype &a, anytype &b)

關鍵字template和typename必選,typename可以使用class代替,anytype一般直接寫為t

詳情見funtemp.cpp

常見的情形是把模板放在標頭檔案中

1. 過載的模板

template

void swap(t *a, t *b, int n);

emplate

void swap(anytype &a, anytype &b);

2. 顯示具體化

當模板的使用受限時,例如struct想交換某些特定成員,可以使用顯示具體化,當編譯器找到與函式呼叫匹配的具體化定義是,將適用該定義,不再找模板

template

<> void swap(job &, job &); //

非模板》顯示具體化》模板

c 函式探幽

inline double square double x int rats 1,next 2 int rodents rats rodents next 賦值操作而已必須在宣告引用變數時進行初始化。一旦與某個變數關聯,將不能改變關聯關係。void swap int a,int b const fr...

C 函式探幽

內聯函式 工作原理 將一些短小的函式,宣告為inline型別,編譯器在編譯時,會直接替換函式呼叫處的 為什麼會有內聯函式 在程式執行時,如果呼叫了函式,會經歷以下步驟 1.拷貝引數,記憶體中跳轉到當前函式的機器碼內,複製引數,執行 2.將函式的返回值放在cpu暫存器或某個記憶體位址中 3.回到被呼叫...

C Premer Plus學習(五) 函式探幽

內聯函式就是比較省資源,然後一般就是將簡短,使用頻率高的函式作為內聯函式會比較合適。include stdafx.h include using namespace std inline double square double x int tmain int argc,tchar ar c和c 使...