這章英文名字叫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引用。
對於想要修改調用函數數據的函數:
如果數據對象是內置數據類型,則使用指針
如果數據對象是數組,只能使用指針
如果數據對象是結構,則使用指針或引用
如果數據對象是類,則使用引用