《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.一旦使用者自己定義了...