C++ Templates讀書筆記 函數模版

來源:互聯網
上載者:User

  C++ Templates讀書筆記< 一 > 函數模版

* 並不是把模板編譯成一個可以處理任何類型的單一實體,而是對於執行個體化模板參數的沒種類型,都從模板產生出一個不同的實體。* 具體類型代替模板參數的過程,叫做“執行個體化”* 模板被編譯了兩次:1。 執行個體化之前,檢查模板本身的文法2。 執行個體化期間,察看是否所有的調用都有效* 函數模板內部,不能制定預設的模板實參(類模板可以)。* 函數模板的實參演繹:調用參數的類型構造自模板參數,所以模板參數和調用參數通常是相關的。  模板實參演繹並不適合傳回型別。* eg:           1 template< typename T1, typename T2 >
                 2 inline T1 max( T1 const& a, T2 const& b )
                 3 {
                 4      return a < b ? b : a;
                 5 }註:傳回型別不能是引用。因為若返回T2類型實參,則T2需要轉為T1,這個過程將會建立一個新的局部臨時變數。* 重載函數模版:a> 一個非模板函數可以和一個同名的模版函數同時存在,並且該模板函數還可以被執行個體化為這個非模板函數。b> 模板不允許自動類型轉換,但普通非模板函數可以。eg: 1         inline int const& max( int const& a, int const& b )
 2         {
 3             return a < b ? b : a;
 4         }
 5         
 6         template< typename T >
 7         inline T const& max( T const& a, T const& b )
 8         {
 9             return a < b ? b : a;
10         }
11         
12         max( 7.0, 42.0 );       // 調用max<double>
13         max( 'a', 'b' );         // 調用max<char>
14         max( 7, 42 );            // 調用int重載的非函數模板
15         max<>( 7, 42 );        // 調用max<int>            上述 a>
16         max<double>( 7, 42 ); // 調用max<double>    沒有實參演繹
17         max< 'a', 42.7 >;      // 調用int重載的非函數模板    上述 b>c> 函數的所有重載版本的聲明都應該位於函數被調用的位置之前

著作權聲明:本篇為原創文章,允許轉載,但轉載時請務必以超連結形式標明文章的原始出處和作者資訊。請尊重本人的勞動成果,謝謝!
小祥的BLOG http://xfxsworld.cnblogs.com

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.