日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++ Primer 5th笔记(chap 16 模板和泛型编程)模板实参

發布時間:2025/3/21 c/c++ 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++ Primer 5th笔记(chap 16 模板和泛型编程)模板实参 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 類型參數可以使用任何名字(通常命名為 T)

template <typename Foo> Foo calc (const Foo& a, const Foo& b){Foo tmp = a; / / tmp 的類型與參數和返回類型一樣//...return tmp; // 返回類型和參數類型一樣 }

1.1 模板參數與作用域

一個模板參數名的可用范圍:聲明之后, 至模板聲明或定義結束之前。

  • 與任何其他名字一樣, 模板參數會隱藏外層作用域中聲明的相同名字。
typedef double A;template <typename A, typename B> void f (A a, B b){/ / tmp 的類型為模板參數 A 的類型 , 而非 double/ / 錯誤: 重聲明模板參數 BA tmp = a;double B; }
  • 一個模板參數名在一個特定模板參數列表中只能出現一次(與大多數其他上下文不同, 在模板內不能重用模板參數名)
// 錯誤: 非法重用模板參數名 v templatetypename V, typename V>//...

1.2 模板聲明

模板聲明必須包含模板參數

/ / 聲明但不定義 compare 和 Blob template <typename T> int compare (const T &, const T & ); template <typename T> class Blob;
  • 與函數參數相同, 聲明中的模板參數的名字不必與定義中相同,但必須有相同數量和種類( 即, 類型或非類型) 的參數。
/**************3 個 calc 都指向相同的函數模板**************///模板的聲明 template ctypename T> T calc (const T &, const T& ); / / 聲明 template <typename U> U calc (const U&, const U& ); / / 聲明//模板的定義 template <typename Type> Type calc (const Types a, const Types b) { / ?" / }

1.3 使用類的類型成員

為了處理模板, 編譯器必須知道名字是否表示一個類型。

例如, 假定 T 是一個類型參數的名字,語句有歧義: T::sizetype * p;

  • 一個名為 p 的變量?
  • 一個名為 SiZe_type 的 static 數據成員與名為 p 的變量相乘?

默認情況下, C++語言假定通過作用域運算符訪問的名字不是類型。 因此, 如果我們希望使用一個模板類型參數的類型成員, 就必須顯式告訴編譯器該名字是一個類型。 我們通過使用關鍵字 typename 來實現這一點:

//top 函數期待一個容器類型的實參, 它使用 typename 指明其返回類型并在 c //中沒有元素時生成一個值初始化的元素( 參見 7.5.3 節, 第 262 頁) 返回給調用者.template <typename T> typename T::value_type top (const T& c ) {if (!c.empty ( ) )return c.back ( ) ;elsereturn typename T::value_type ( ); }

總結

以上是生活随笔為你收集整理的C++ Primer 5th笔记(chap 16 模板和泛型编程)模板实参的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。