真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯網站制作重慶分公司

如何解析學習C++時的疑難問題

本篇文章為大家展示了如何解析學習C++時的疑難問題,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

我們提供的服務有:成都網站建設、成都網站制作、微信公眾號開發(fā)、網站優(yōu)化、網站認證、寧陜ssl等。為1000多家企事業(yè)單位解決了網站和推廣的問題。提供周到的售前咨詢和貼心的售后服務,是有科學管理、有技術的寧陜網站制作公司

許多編程人員學習C++總結經驗為,有的覺得C++語言是一門獨立的語言,并不是在C語言的基礎上,可以直接學習C++不必先從C下手,這就像C++與Java一樣,局部的結構還是不一樣的。

C++作為一種通用的程序設計語言已相當成功的實現了她最初的設計目標:高效率,通用性,可擴展性與靈活性;是一種語言而不是一個系統;她給予程序員尊重而不是束縛等等。

其實,學習C++時,它還支持一種被稱為模板元編程的泛型程序設計范型,其核心就是巧妙利用C++的模板機制與面向對象的機制將程序對數據的處理提前到編譯期,而不是運行時。這種程序設計方式如同函數式的編程方式。在這種設計范型中沒有變量與循環(huán),但其圖靈完備所以稱其為元編程。

接下來我將舉一個簡單的例子看看這種程序設計對運行時效率的影響。有這么一組數列1,1,2,3,5,8,13,21,等等,最前一,二項是1,以后每一項是其前兩項的和?,F在我們編程計算第N項的數值。程序如下:

//CODE  #include "stdafx.h"  //編譯期計算方法  template   //主模板 計算數列第N項  struct f  {   enum {value=f::value+f::value};  };  template<> struct f<1>  //特化模板  數列***項是1  {   enum {value=1};  };  template<> struct f<2>  //特化模板  數列第二項是1  {   enum {value=1};  };  //遠行時計算方法  long F (long n)  {   if (n==1 || n==2)  //數列***,二項是1直接返回   {    return 1;   }   else      //遞歸   {    return F(n-1)+F(n-2);   }  }  int _tmain(int argc, _TCHAR* argv[])  {   std::cout<::value<

特化模板就如同我們循環(huán)的終止條件,在模板的遞歸實例化過程中充當遞歸終止條件。當主模板的N降為1或2時,模板遞歸實例化停止,開始計算value的數值。有人會問:為什么當N等于1或2時,編譯器會根據特化模板實例化呢?

還記得C++對函數的調用規(guī)則嗎?學習C++在調用重載函數過程中,編譯器會尋求最匹配的一個。其實,在C++中,當編譯器發(fā)現有眾多被選項時,它會選擇***條件,最匹配的那個。這不是很合理嗎?

我想接下來的代碼就是你我非常熟悉不過的了,一個遞歸函數,測試代碼,程序結果:

template<>  struct f<1>  //特化模板  數列***項是1   {    enum {value=1};   };   template<>  struct f<2>  //特化模板  數列第二項是1  {    enum {value=1};   };

有人會問:問號是什么意思?其實是“不知道”的意思。***行不到1秒(其實更短)就輸出了,而和它一模一樣運行時的結果卻讓我等得花兒都謝了。為什么會這樣呢?編譯期學習C++運行時計算秘密在于?:***行的結果在程序運行時結果已經早就被算出來了,程序只要簡單的輸出即可;

而它的同胞兄弟還在運行時堆棧里漫游了。模板實例化發(fā)生在程序構造階段——編譯期,所以有關的計算都發(fā)生在編譯期,即編譯期計算。而普通的遞歸函數運行于程序的運行期,其執(zhí)行要牽涉大量的堆棧操作,有關計算必須在運行時計算。由以上的直觀體驗我們可以看到編譯期計算對程序運行時的效率提高的影響是巨大的。

上述內容就是如何解析學習C++時的疑難問題,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注創(chuàng)新互聯行業(yè)資訊頻道。


本文名稱:如何解析學習C++時的疑難問題
鏈接地址:http://weahome.cn/article/pjjhge.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部