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

2021-08-21 16:19:43 字數 3358 閱讀 8134

c++關鍵字(c++98) 有63個

命名空間解決了:名字衝突,有作用域的作用

命名空間的使用格式:

namespace

n1

使用方法

1. n1::變數

2. using n1::變數;

3. using namespace n1;

c++的輸入輸出

標頭檔案:iostream

命名空間:using namespace std;

使用:

int a;

cin>>a;

cout

<<"hello"

cout

《預設引數void test(int a = 0)

全預設引數

如果沒有傳遞對應引數,則用預設預設值

傳參的時候從右往左傳遞(約定的)

半預設引數

部分引數帶有預設值

++注意++:

半預設引數應該要從右邊開始給,不能有空乙個引數,即從右往左引數要連續賦值

不能這樣寫:

void test(int a = 1, int b , int c = 3)
這樣是對的:

void test(int a, int b = 2, int c = 3)

注意

預設引數不能再函式宣告和定義中同時出現,寫在函式宣告中即可

預設值必須是常量或者全域性變數

++在同一作用域++宣告幾個功能類似的同名函式

**這些同名函式的形參列表(引數個數、型別、順序)必須

不同,常用來處理實現功能類似資料型別不同的問題**

簡記:作用域相同,函式名相同,引數不同,僅僅是函式的返回值型別不同是無法構成過載的

int add(int a, int b)

double add(double a, double b)

編譯器會識別引數型別,來呼叫匹配的函式

c和c++對同名函式處理:

注:c不支援函式過載

c:在函式名前加了乙個下劃線

c++:(?add@@ya hhd @z)

hhd 代表返回值,引數一的型別,引數二的型別

c++還考慮了引數的型別,所以c++支援函式過載,而c語言不支援。

在c++工程中按照c的風格來編譯:

extern

"c"int add(int a,int b);

引用不是新定義乙個變數,而是給已存在變數取了乙個別名,編譯器不會為引用變數開闢記憶體空間,它和它引用的變數共用同一塊記憶體空間。

注意:引用型別必須和源資料型別相同

引用在定義時必須初始化

乙個變數可以有多個引用

引用一旦引用乙個實體,再不能引用其他實體

常引用

const

int a = 10;

const

int& ra = a;

const

int& r = 10;

double d = 12.34;

const

int& rd = d;//這時 d 和 rd 的位址不一樣了

//陣列的引用

int arr1[10];

int (&rarr1)[10] = arr1;

rarr1[0] = 10;

double d = 12.34;

const int& rd = d;//這時 d 和 rd 的位址不一樣了

解答:資料會被截斷,放到另乙個臨時空間,rd已經是臨時空間的別名了

傳引用交換兩數

void swap(int& left, int& right)

如果不想改變外部實參

可以加入const

void fun(const

int& a);

注意
int& test()

int main()

解決方法:將int a=0;做成全域性變數,即移到函式外或者

int& test(int& a)

int main()

引用和指標在底層的處理方式都是一樣的。

引用形式

指標形式

t&t* const

const t&

const t* const

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

一旦乙個引用被初始化為指向乙個物件,就不能再指向其他物件,而 指標可以在任何時候指向任何乙個同型別物件

沒有null引用,但有null指標

在sizeof中含義不同:引用結果為引用型別的大小,但指標始終是地 址空間所佔位元組個數

引用自加改變變數的內容,指標自加改變了指標指向

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

指標需要手動定址,引用通過編譯器實現定址

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

用inline修飾,在程式編譯時,使用內聯函式的會自動展開

inline

int add(int a, int b)

int main()

在debug模式下,實際發現並沒有展開,還是呼叫函式(call)

在release模式下,檢視彙編**,有push 3;說明直接計算出了結果。將結果替換了

在release模式下,編譯器會大量優化。

一般在debug模式下,不會進行優化

inline 以空間換時間

當出現遞迴或者很長的迴圈時,或者**太長,則會忽略inline,inline對編譯器只是乙個建議

常量定義 換用 const

函式定義 換用 內聯函式

型別重定義 換用 typedef

C 命名空間 引用 內聯函式

命名空間 定義命名空間 namespace namespacea namespace namespacebnode 使用方法1 using namespace namespaceb namespacec node t 使用方法2 using namespaceb namespacec node no...

C 函式過載 引用 內聯函式

2 函式過載 3 引用 4 內聯函式 在宣告或定義函式時,給函式的引數設定乙個預設值,當使用者對函式進行呼叫時,如果傳遞了實參,則使用使用者傳遞的實參 如果沒有傳遞則使用預設值。預設引數必須從右往左給出 不能在函式宣告和定義的位置同時給出 預設引數在提供時 常量 全域性變數 c語言不支援。相同作用域...

函式過載 引用 內聯函式

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