日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
解析學習C++時的疑難問題

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

10年積累的成都網(wǎng)站設(shè)計、成都網(wǎng)站制作、外貿(mào)網(wǎng)站建設(shè)經(jīng)驗,可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認識你,你也不認識我。但先網(wǎng)站制作后付款的網(wǎng)站建設(shè)流程,更有光明免費網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

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

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

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

 
 
 
  1. //CODE  
  2. #include "stdafx.h"  
  3. //編譯期計算方法  
  4. template  n>  //主模板 計算數(shù)列第N項  
  5. struct f  
  6. {  
  7.  enum {value=f::value+f::value};  
  8. };  
  9. template<> 
  10. struct f<1>  //特化模板  數(shù)列***項是1  
  11. {  
  12.  enum {value=1};  
  13. };  
  14. template<> 
  15. struct f<2>  //特化模板  數(shù)列第二項是1  
  16. {  
  17.  enum {value=1};  
  18. };  
  19. //遠行時計算方法  
  20. long F (long n)  
  21. {  
  22.  if (n==1 || n==2)  //數(shù)列***,二項是1直接返回  
  23.  {  
  24.   return 1;  
  25.  }  
  26.  else      //遞歸  
  27.  {  
  28.   return F(n-1)+F(n-2);  
  29.  }  
  30. }  
  31. int _tmain(int argc, _TCHAR* argv[])  
  32. {  
  33.  std::cout<::value<; //計算第45項的數(shù)值  
  34.  std::cout<(45)<;  
  35.  return 0;  

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

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

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

 
 
 
  1. template<> 
  2.  struct f<1>  //特化模板  數(shù)列***項是1  
  3.  {  
  4.   enum {value=1};  
  5.  };  
  6.  template<> 
  7.  struct f<2>  //特化模板  數(shù)列第二項是1  
  8. {  
  9.   enum {value=1};  
  10.  }; 

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

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

  1. C與C++中標準輸入實現(xiàn)方式上的一點區(qū)別
  2. C++編譯器如何對Const常量進行分配存儲空間
  3. C++類庫設(shè)計的基本構(gòu)思與方法
  4. 玩轉(zhuǎn)C++語言的幾種方法
  5. 如何更好的進行C++代碼編制

本文題目:解析學習C++時的疑難問題
當前地址:http://m.5511xx.com/article/cossejj.html