天天看點

第八章 函數探幽(1)

這章英文名字叫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引用。

對于想要修改調用函數資料的函數:

如果資料對象是内置資料類型,則使用指針

如果資料對象是數組,隻能使用指針

如果資料對象是結構,則使用指針或引用

如果資料對象是類,則使用引用

繼續閱讀