第八章 函數探幽(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引用。


對於想要修改調用函數數據的函數:

如果數據對象是內置數據類型,則使用指針

如果數據對象是數組,只能使用指針

如果數據對象是結構,則使用指針或引用

如果數據對象是類,則使用引用

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章