這章英文名字叫adventures in Functions,中文譯者把它翻譯成函數探幽。。。
1. 内聯函數
内聯函數是C++提高程式運作速度所做的一項改進。正常函數執行時,程式将在函數調用後立即存儲該指令的記憶體位址,并将函數參數複制到堆棧,跳到标記函數起點的記憶體單元,執行函數,然後跳回到位址被儲存的指令處。這一跳一跳的就降低效率了。而内聯函數就不會跳來跳去,但代價就是需要占用更多記憶體。如果程式在10個不同的地方調用一個内聯函數,則程式将包含該函數代碼的十個副本。
内聯函數怎麼使用呢:
在函數聲明前加上關鍵字inline
在函數定義前腳傷關鍵字inline
注意的是内聯函數不能遞歸,不能太大。
2. 引用變量
引用變量是已定義的變量的别名,主要用途使用做函數的形參,通過将引用變量用作參數,函數使用原始資料,而不是副本。
引用變量這樣定義:
int a;
int & b = a;
這樣a和b允許呼喚,因為它們指向相同的值和記憶體單元。
注意聲明引用變量是必須對其初始化,不能
int a;
int &b;
b = a; // 不行!
如果函數這樣定義
void fun(int a); //這樣的函數是按值傳遞
void fun(int &a);//這樣的函數将引用作為函數參數,稱為按引用傳遞。
注意上例中使用引用傳遞時a必須是一個變量,不能是一個表達式。
使用引用參數應盡可能使用const:
使用const可避免無意中修改資料的程式設計錯誤;
使用const使函數能夠處理const和非const實參,否則将隻能接受非const資料;
使用const引用使函數能夠正确生成并使用臨時變量。
引用非常适合于結構和類。
8.2.7總結了何時使用引用參數
使用引用參數的兩個主要原因:
可以修改調用函數的資料對象;
通過傳遞引用而不是整個資料對象,可以提高程式運作速度。這條對結構和類意義重大。
看起來引用和指針差不多,何時用什麼的紙雕原則:
對于使用傳遞的值不做修改的函數:
如果資料對象很小,如内置資料類型或小型結構,則按值傳遞
如果資料對象是數組,則使用指針,因為這是唯一選擇,并将指針聲明為執行const的指針
如果資料對象是較大的結構,則使用const指針或const引用,以提高程式效率。
如果資料對象是類對象,則使用const引用。
對于想要修改調用函數資料的函數:
如果資料對象是内置資料類型,則使用指針
如果資料對象是數組,隻能使用指針
如果資料對象是結構,則使用指針或引用
如果資料對象是類,則使用引用