C 基本知識

2021-08-25 14:08:49 字數 3050 閱讀 1379

內聯函式

c++98的標準下為63個關鍵字

//1. 普通的命名空間

namespace n1 // n1為命名空間的名稱

}//2. 命名空間可以巢狀

namespace n2

namespace n3 }

}//3. 同乙個工程中允許存在多個相同名稱的命名空間,編譯器最後會合成同乙個命名空間中。

1.加命名空間名稱及作用域限定符

int main()

2.使用using將命名空間中成員引入

using n1::b;

int main()

3.使用using namespace 命名空間名稱引入

using namespace n1;

int main()

#includeusing namespace std;

int main()

double add(double left, double right)

long add(long left, long right)

int main()

注意c函式不支援函式過載?

原因在於:名字修飾

名字修飾(name mangling)是一種在編譯過程中,將函式、變數的名稱重新改編的機制,簡單來說就是編譯器為了區分各個函式,將函式通過一定演算法,重新修飾為乙個全域性唯一的名稱。

為什麼c語言不支援函式過載?

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

型別& 引用變數名(物件名) = 引用實體;

void testref()

注意:引用型別必須和引用實體是同種型別的

注意引用在定義時必須初始化

乙個變數可以有多個引用

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

常引用

void testconstref()

陣列的引用

void printarray(int (&array)[10])     //int (&array) [10]

//單純引入值

void swap2(int left, int right)

//單純引入指標

void swap3(int *left, int *right)

int main()

上述三種傳值方式對比:

注意

引用            <=>    指標

int& ra = a; <=> int * const ra = &a;//const代表ra只能指向a

2. 作返回值(生命週期比函式長)

看下面兩個**的比較:

int add(int a, int b)

int main()

int& add(int a, int b)

int main()

引用和指標的區別

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

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

沒有null引用,但有null指標

++的含義不同:引用自加即引用的實體增加1,指標自加即指標向後偏移乙個型別的大小

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

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

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

以inline修飾的函式叫做內聯函式,編譯時c++編譯器會在呼叫內聯函式的地方展開,沒有函式壓棧的開銷,內聯函式提公升程式執行的效率。

在介紹內聯函式時,先引入一下巨集

巨集巨集的優缺點?

#define max(a, b)  ((a) > (b) ? a : (b))  //這就是乙個巨集

int main()

上面的** a 有時候自增1次 ,有時候又自增兩次(與其比較的數字的大小來決定的),這樣的**是不好的,怎麼處理?—>內聯函式

inline int max(int a, int b)

int main()

原因:

這種轉移操作要求在轉去前要保護現場並記憶執行的位址,轉回後先要恢復現場,並按原來儲存位址繼續執行。因此,函式呼叫要有一定的時間和空間方面的開銷,於是將影響其效率。

特性inline是一種以空間換時間的做法,省去呼叫函式額開銷。所以**很長或者有迴圈/遞迴的函式不適宜使用作為內聯函式。

inline對於編譯器而言只是乙個建議,編譯器會自動優化,如果定義為inline的函式體內有迴圈/遞迴等等,編譯器優化時會忽略掉內聯。

補充常見面試題:

巨集的優缺點與那些技術可以可以替代巨集?

巨集的優點:

1.增強**的復用性。

2.提高效能

缺點:1.不方便除錯巨集。(因為預編譯階段進行了替換)

2.導致**可讀性差,可維護性差,容易誤用。

3.沒有型別安全的檢查

c++有哪些技術替代巨集?

常量定義 換用 const

函式定義 換用 內聯函式

型別重定義 換用 typedef

c 基本知識

1.類 包含某一物體的基本屬性的抽象。2.物件 具體指某乙個物體。實實在在存在的東西。3.建構函式 負責類建立物件的函式。如果類沒有宣告建構函式,c 編譯器會提供預設的無參的建構函式。這個函式只負責建立物件,不負責物件初始化工作。4.析構函式 負責釋放物件,記憶體的 5.變數訪問修飾符 public...

c 基本知識

函式過載 c語言的符號生成規則 只和函式名有關 c 的符號生成規則 函式原型 函式頭部 1.返回值 返回值不能作為過載的依據,可能會產生二義性 2.函式名 c語言的符號生成規則只和函式名有關,如果把函式名作為返回值的話,就和c語言衝突了.3.函式形參 1 引數個數 2 引數型別 3 引數順序 函式形...

C 基本知識

c 基本語法 特點 1每條語句以分號結尾,建議一行一語句 2嚴格區分大小寫 3 塊使用來界定,塊種可包含任意條語句 注釋 單行注釋 多行注釋 摺疊 region.endregion 變數 計算機種佔據一定記憶體單元的儲存區域。變數名 儲存資料的變數所佔據的那塊記憶體單元的標識名。變數的命名規則及特點...