chap 1 C++汎用技術基礎--テンプレート#STL

4934 ワード

0縁起
  • プログラミングの経験と蓄積が少しあって、系統的な学習の下でSTLを考えて、以前はすべて勝手にしたノートで、今テーマの出力を考えています.
  • 本の原型はISBN:9787302421757 『C++汎用STL原理と応用』で、図書館から借りた国内の大学教材で、まずこれを読み終えて、できれば該当する章でplusバージョンをもう一つ書きます.

  • 1コンテンツ
    1.1汎用およびテンプレート
    1.1.1汎用の概念
  • 汎用(generic type):汎用タイプです.
  • T max( T x, T y) {}//ここでTはタイププレースホルダです.

  • 1.1.2 C++テンプレートとその定義
  • テンプレート:タイププレースホルダを宣言する必要がある場合を除き、他の内容はターゲットエンティティコードと完全に同じである必要があります.テンプレートを宣言する場合は、エンティティコードの前に説明文を追加します.前はtemplateキーワードです.
  • 関数テンプレート
  • template T max(R x, S y){}

  • クラステンプレート
  • 宣言文にtemplate
  • を付ける


    1.1.3いくつかの説明とまとめ
  • templateは初期にもtemplateと書かれていたが、このような
  • はサポートされていない.
  • C++11と14では、キーワードautoに新しい意味を追加し、decltype式を追加します.
  • autoキーワードは、データ型を自動的に導出ためのauto i=100;
  • である.
  • 以前はautoはシステムの内蔵データにのみ有効だったが、コンパイラのタイプ記憶能力を利用して、カスタムタイプを覚えることができるようになった.
  • 変数タイプの特定が困難な問題は主に関数の戻り値に現れるため、関数の戻り値タイプの位置にはautoキーワードがしばしば現れる、auto戻り値占有
  • と呼ばれる.
  • auto Multiply(T t, U u)->decltype(t*u) {return t*u;}

  • autoをデータ型と見なすと、autoは実は汎用型とも言えるが、キーワードtypename宣言は必要ない.
  • C++の新しい標準は変数テンプレートの概念を導入した.pi【作者は更に多く紹介していないで、C++11をめくることができます】
  • 1.2テンプレートパラメータについて
    1.2.1テンプレートパラメータの種類
  • タイプパラメータ
  • クラステンプレートを関数とする実例MyTest>TT;
  • .
  • 非タイプパラメータ
  • template

  • テンプレート定義型パラメータ
  • C++はクラステンプレートの定義をクラステンプレートパラメータとしても許可する
  • が必要とする目的:このパラメータの実パラメータがクラステンプレートである必要があることを強調するほか、このクラステンプレートが持つパラメータの個数も強調する.



  • 1.2.2テンプレートパラメータと実パラメータの結合
  • 関数テンプレートの実パラメータの暗黙的な提供
  • add(45,46);は直接add(45,46);
  • になる.
  • ポインタ実パラメータ
  • C++では、ポインタはデータ型と見なされる.
  • 具体的なコードを参照してください.【作者は説明していないが、私はまだこの部分をよく知らない】
  • 修飾字constと&の使用
  • 具体的なコード例を参照してください.【具体的なアプリケーションシーンを見たことがない】

  • 1.3特化テンプレートとテンプレートの具現規則
    1.3.1特化(特列化)テンプレート
  • 特化(特列化)テンプレート:特殊なアルゴリズムの要求があるデータ型のためにテンプレートを別途作成する
  • 共通テンプレート:入場券10元
  • 特化テンプレート:学生と老人半額
  • 関数テンプレートの特化テンプレート
  • エンティティコードの前に、次の宣言tmplate<>
  • を追加します.
  • 類テンプレートの特化と偏特化
  • 偏特化:パラメータの1つまたは複数の
  • のみを特化する
  • 偏特化テンプレートの書き方template struct Test{}
  • フル特化テンプレートの書き方template<> struct Test{}

  • 1.3.2テンプレートの具現
  • 以上の汎用モジュールの共存があるため、コンパイラは生成エンティティモジュールコードを選択する必要があり、ルールがあります.
  • 具体的な優先順位
  • 特化テンプレート(関数またはクラス)
  • 偏特化テンプレート(関数またはクラス)
  • 一般テンプレート(関数またはクラス)
  • システム

  • 1.4右参照とテンプレート
  • 遷移の意味はC 11が発表した新しい概念と新しい技術である.

  • 1.4.1右値参照
  • 右:代入演算子の右側にのみ表示されます.データのみを表すことができます.匿名、固定アドレスのないオブジェクト.
  • 左:代入演算子の左側にも代入演算子の右側にも表示されます.名前付き、固定アドレス付き式
  • 右参照
  • C 11の前に2つの表現があるT& = lvalue;// const T& = lvalue;//
  • がある.
  • C 11以降は1つのみ定義:const T& = rvalue;
  • 強の動作右値に変数名を付け、右値のライフサイクルを延長することを目的とします.
  • 右値の非常量参照T&& =rvalue;


  • 1.4.2右参照の適用1-転送の意味
  • 深いコピー
  • 浅いコピー
  • 1.4.3右値参照の適用2-転送関数move()
  • 右値参照がメリットがある後、左値も利用したい、moveの原型T&& move(T& val);
  • 1.4.4右参照の適用3-パラメータ完全転送テンプレート()
  • パラメータ転送
  • 1完璧な転送問題の提出と解決構想
  • 2テンプレートパラメータタイプ導出規則--参照子折り畳み規則
  • 3パラメータタイプが正しく転送される保証--forward()関数テンプレート
  • static_cast():この変換はパラメータが右の値の場合にのみ役立ちます.
  • C++11はstatic_cast()を関数テンプレートstd::forwardにカプセル化し、Func(forwad(a));

  • この章のコード
    その他の教材に該当する章
  • 『C++STL開発技術ガイド』 chap 2 C++テンプレート技術P 39/454
  • コンテンツ
  • 2.4関数テンプレートリロードP 44コンパイラ呼び出し規則
  • 2.5クラステンプレート継承P 44
  • コードはその時になってから一緒に提出します.

  • 問題
  • テンプレートとマクロの関係は何ですか?【lionel]



  • バージョンの読み取りと問題点
  • 2017-01-14両トマト時計:1.1節理解とコード完成、1.2節見始めたばかり
  • C++の新しい標準は変数テンプレートの概念を導入した.pi【作者は更に多く紹介していないで、C++11をめくることができます】
  • クラステンプレートを関数実参の例として、簡単に理解できますが、実際の応用シーンでは、今のところよく言えません.

  • 2017-01-15 2個のトマト時計:1.2と1.3節理解とコード完成
  • 現在これらはただ知っているだけで、まだ完全に覚えていないので、アプリケーションシーンがもっと分かりません.

  • 2017-01-16 2個トマト時計:1.4終了
  • この部分は教科書で見ただけで、完全に消化されていないので、もう一度戻ってみる必要があります.
  • C++11と組み合わせて一緒に見なければなりませんか?【lionel】

  • 2017-01-17『C++STL開発技術ガイド』のchap 2
  • を見た.