C++ primer 第七章

 

這書在年初的時候看了六章,然後就一直放着沒看,慚愧……這幾天再拿出來,爭取看完

 

1. 函數不能返回另一個函數或者內置數組類型,但是可以返回指向函數的指針。

 

2. 指向函數的指針,這是個挺奇怪的東西,不知道主要的用途是什麼。

像其它指針一樣,函數指針也指向某個特定的類型。函數類型由其【返回類型】以及【形參表】決定,跟函數名無關。

例:bool (*pf) (const string&,const string&); //聲明瞭函數指針pf

 

在引用函數名但沒有調用該函數時,函數名將被自動解釋爲指向函數的指針。

將函數指針初始化爲0,表示該指針不指向任何函數。

 

函數的形參可以是指向函數的指針,例:

void foo(string &, bool(*)(int) ); 或者 void foo(string &, bool(int) );

返回指向函數的指針,例

int (*ff(int))(int *,int); 表示函數ff(int)返回一個指針int (*) (int *,int);

使用下面的方式會容易理解:

typedef int (*PF) (int *, int);

PF ff(int);

 

函數指針可以指向重載的函數。

 

3. 引用只是一個別名。

 

4. 在C語言(不是C++)中,具有const形參或者非const形參的函數並無區別。

 

5. 應該將不需要修改的引用形參定義爲const引用。因爲普通的非const引用形參在使用時不夠靈活,既不能用const對象初始化,也不能用字面值或者右值表達式初始化。

 

6. 如果想傳遞容器,應該傾向於傳遞指向容器的迭代器。

 

7. 在無法列舉傳遞給函數的所有實參的類型和數目時,可以使用省略符形參。省略符暫停了類型檢查機制。可以用如下兩種形式:

void foo(parm_list,...); 或 void foo(...);

對C++程序,只能將簡單數據類型傳遞給含有省略符形參的函數。實際上,當需要傳遞給省略符形參時,【大多數類】類型對象都不能正確賦值。

 

8. 不帶返回值的return語句只能用於返回類型爲void的函數。

 

9. 如果主函數最後沒有return返回,嘖編譯器會隱式插入返回0的語句。

爲了使返回值獨立於機器,可以使用cstdlib的兩個與處理變量,來代表程序運行成功與失敗。

#include<cstdlib>
int main(){
   if(some_failure)
      return EXIT_FAILURE;
   else
      return EXIT_SUCCESS;
}


10. 默認實參是通過給形參表中的形參提供明確的初始值來指定的。程序員可爲一個或多個形參定義默認值。但是如果有一個形參定義了默認值,則其後的所有形參都必須有默認形參。

既可以在函數聲明處也可以在定義處指定默認實參,但是一個文件中只能指定一次。最好是在聲明出指定默認形參。

 

11. static局部對象確保不遲於程序執行流程第一次經過該對象的定義語句時初始化。這種對象一旦被創建,在程序結束前不會被銷燬。

 

12. 內聯函數:在函數返回類型前加上inline就可以講函數指定爲內聯函數。應該在頭文件中定義,因爲內聯函數對於編譯器而言必須是可見的,一遍遍一起在調用處展開該函數的代碼。

 

13. 構造函數的初始化列表:在構造函數名的冒號和花括號之間的代碼,爲類的一個或多個數據成員指定初值,形式是每個成員名+圓括號中的初始值,每個成員間用逗號隔開。例:

Class_Name():param_int(0),param_double(0.0){
}


14. 由編譯器自動生成的構造函數,一般只適用於僅包含類類型成員的類。對於含有內置類型或複合類型成員,不會自動初始化。

 

15. 如果兩個函數聲明的返回類型和形參表完全相同,則將第二個視爲第一個的重複聲明。如果僅有形參表相同而返回類型不同,則第二個聲明是錯誤的。

 

16. 使用枚舉類型作爲形參的函數,只能用同一枚舉類型的另一個對象或者一個枚舉成員作爲實參。整數對象即使具有與枚舉元素相同的值,也不能作爲實參。

 

17. 僅當形參是引用或者指針時,是否爲const纔有影響。

發佈了84 篇原創文章 · 獲贊 9 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章