1.函式引數的預設值
c++引數預設值的賦值
下面是具體的示例**:必須從右向左,依次賦預設值
函式引數的預設值不可以重複賦值
當main函式編譯生成指令之後,其他檔案中修改某一引數不會造成影響,只有在同一檔案中重複賦值才會出錯
2.內聯函式#includeusing namespace std;
//int fun(int a= 100, int b , int c); //error賦值必須是從右向左,c和b還沒有被賦值
int fun(int a, int b, int c = 40);
int main()
//int fun(int a, int b, int c = 10) //error 在上面函式申明的時候已經給c賦過值了,不能重複賦值
int fun(int a, int b, int c)
內聯函式的形式:在普通函式前面加上inline
內聯函式會在呼叫點展開
**示例:
inline int fun(int a, int b)//內聯函式
內聯函式一定會展開嗎?inline函式知識對編譯器乙個建議,編譯器會在具體的情況下考慮是否處理成內聯內聯函式在不同版中的特點:
在debug版本中:在這個版中可以除錯,會生成乙個local符號,也會進行函式棧幀開闢回退之類的動作
在release版本中:不可以除錯,不會產生符號,也不會進行函式棧幀回退之類的動作,但會在呼叫點進行展開
3.巨集:最大的隱患是沒有安全檢查
具體的**如下:
#define sum(a,b)
//巨集定義是在預編譯時期處理的,而其他函式傳參是在編譯時期
int main()
巨集、static函式和內聯函式的區別:巨集的特點:
不存在棧幀的開闢
不存在引數的帶入
不存在返回值的帶出
不存在引數的清楚
不存在型別的檢查
不可以除錯
4.過載inline static 巨集
debug版本中會生成local符號 產生符號 不產生符號
release版本中不會生成符號
debug版本中會進行棧幀操作 進行棧指標操作 在呼叫點展開
release版中直接在呼叫點展開 (預編譯期)
(編譯期)
可以除錯 可以除錯 可以除錯
有型別檢查 有型別檢查 無型別檢查
c語言中
在c語言中靠的是函式名來生成符號,若是函式名一樣,在編譯時期生成的符號是一樣的
c++中
過載函式的示例:在c++中,符號的生成是靠函式名和函式的引數列表生成的,這就是函式的過載
函式的過載需要注意一下幾個方面:函式名要相同
函式引數要不同
必須處於同一作用域
上面**中每乙個函式過載之後得到的型別不同,但是有時候會出現給的引數的型別不明確,則函式過載會失敗,請看下面**:bool compare_int(int a, int b)
bool compare_float(float a, float b)
bool compare_double(double a, double b)
bool compare_char(char a, char b)
bool compare_charptr(char *a, char*b)
此時程式就會出錯,主函式中給出的引數值是double型別,而double型別可以轉換成float,char,int,char*,此時主函式就不知道呼叫那個函式了,所以一定要明確型別。bool compare(int a, int b)//compare_int_int
bool compare(float a, float b)//compare_float_float
bool compare(char a, char b)
bool compare(short a, short b)
bool compare(char *a, char*b)
int main()
今天就先介紹這些吧,後續還有c和c++的區別......
C 和C的區別
c 與c語言的關係 1 c 繼承了所有的c特性 2 c 在c的基礎上提供了更多更好的語法和特性 3 c 的設計目標是執行效率和開發效率的統一 c 對c語言的加強 1 c 中所有的變數都可以再需要使用時再定義 如 for迴圈等中需要的變數 3 c中可以定義多個同名的全域性變數 c 不可以 4 cons...
C和C 的區別
這裡主要討論的是區別,而不是c 中有的,而c語言中沒有的東西。c 比c語言多了很多東西,最重要的當屬類 物件導向程式設計 和模板 泛型程式設計 基於泛型程式設計還引出了元程式設計 metaprogramming 等等。這裡討 共部分但是不一樣的部分 函式過載是c 支援的,c不支援 c 的函式過載在類...
C 和C的區別
c c 的聯絡 c c 區別 小知識點補充擴充套件 free 而new開闢物件陣列用的是new size 釋放的的時候是 delete 5 返回值問題,malloc開闢成功返回void 需要強轉,失敗返回null,new 成功返回物件指標,失敗丟擲異常 這就可能會提到c 的new handler機 ...