C 第8章 函式探幽 知識點總結

2021-08-09 11:22:19 字數 1253 閱讀 8465

《c++ primer plus》第8章知識點總結

c++內聯函式

編譯器將使用相應的函式**替代函式呼叫。對於內聯**,程式無需跳到另乙個位置處執行**,再跳回來。因此,內聯函式的執行速度比常規函式稍快,但代價是需要占用更多記憶體

要使用內聯函式,必須採取下述措施之一:

(1)在函式宣告前加上關鍵字inline

(2)在函式定義前加上關鍵字inline

通常的做法是省略原型,將整個定義(即函式頭和所有函式**)放在本應提供原型的地方

下面是乙個例子

#include inline double square(double x)

int main()

第一行指出,要建立乙個模版,並將型別命名為anytype。關鍵字template和typename是必需的,除非可以使用關鍵字class代替typename

模版的過載和函式過載類似,而且過載是不一定都要是泛型,可以有泛型也可以有不是泛型的

具體化的3種

(1)隱式例項化(implicit instantiation)

普通的呼叫模版就是隱式例項化

(2)顯示例項化(explicit instantiation)

直接命令呼叫編譯器建立特定的例項。即呼叫模版時,宣告所需的種類——用<>符號指示型別,並在宣告前加上關鍵字template

template void swap(int,int);

意思就是「使用swap()模版生成int型別的函式定義」

(3)顯示具體化(explicit specialization)

與顯式例項化不同,下面兩個宣告等價

template <> void swap(int &,int &);

template <> void swap(int &,int &);

這兩個宣告的意思是「不要使用swap()模版來生成函式定義,而應使用專門為int型別顯示地定義的函式定義」,這些原型必須有自己的函式定義

顯示具體化

下面是用於交換job結構的非模版函式,模版函式,具體化的原型

void swap(job &a,job &b);

templatevoid swap(t &a,t &b);

template <> void swap(job &a,job &b);

編譯器在選擇原型時,非模版版本》顯示具體化》模版版本

例項化和具體化

c primer plus 第8章 函式探幽

c 擴 展 了 c 語 言 的 函 數 功 能 通 過 將 inline 關鍵 字 用 於 函 數 定 義 並 在 首 次 調 用 該 函 數 前 提 供 其 函 數 定 義 可 以 使 得c 艹 編 譯 器 將 該 函 數 視 為 內 聯 函 數 也 就 是 說 編 譯 器 不 是 讓 程 序 跳...

C primer 第8章節 函式探幽

1.內聯函式比一般的函式執行速度要稍快,但是代價是需要付出更多的記憶體。如果程式在10個地方呼叫同乙個內聯函式,那麼該程式將包含該程式的10個副本。2.使用內聯函式,可以有三種方法 1 在函式宣告的時候,加上關鍵字inline.2 在函式定義的時候,加上關鍵字inline.3 類中實現的函式,將自動...

第3章知識點

方法宣告 修飾符 返回型別 方法名 形參 方法宣告如果形參的型別或個數不同即為過載 類都有乙個預設的構造方法,任何乙個物件的建立 都是由構造方法來建立 1.構造方法的修飾符只能是public 2.構造方法沒有返回值 3.構造方法的方法名跟類名一致 4.預設的構造方法沒有引數 5.一旦使用者自己定義了...