成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

開發 后端
C++作為一種語言,大多數的人都是把它默認為面向對象的支持,認為他就是C語言的替代品,一種延伸而已,而事際上,C++與C是完全不同的語言。

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

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

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

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

  1. //CODE  
  2. #include "stdafx.h"  
  3. //編譯期計算方法  
  4. template <int n>  //主模板 計算數列第N項  
  5. struct f  
  6. {  
  7.  enum {value=f<n-1>::value+f<n-2>::value};  
  8. };  
  9. template<> 
  10. struct f<1>  //特化模板  數列***項是1  
  11. {  
  12.  enum {value=1};  
  13. };  
  14. template<> 
  15. struct f<2>  //特化模板  數列第二項是1  
  16. {  
  17.  enum {value=1};  
  18. };  
  19. //遠行時計算方法  
  20. long F (long n)  
  21. {  
  22.  if (n==1 || n==2)  //數列***,二項是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<<f<45>::value<<std::endl; //計算第45項的數值  
  34.  std::cout<<F(45)<<std::endl;  
  35.  return 0;  

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

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

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

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

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

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

  1. C與C++中標準輸入實現方式上的一點區別
  2. C++編譯器如何對Const常量進行分配存儲空間
  3. C++類庫設計的基本構思與方法
  4. 玩轉C++語言的幾種方法
  5. 如何更好的進行C++代碼編制
責任編輯:chenqingxiang 來源: NET130
相關推薦

2011-04-01 14:05:09

SQL數據庫

2017-04-18 22:50:10

OSPF疑難問題

2011-05-06 14:05:22

打印機照片打印

2012-05-04 09:18:46

2009-11-02 15:03:21

VSFTP服務

2009-12-23 08:53:56

Windows 7遠程協助

2009-12-25 10:59:08

WPF Timer

2011-04-26 16:39:30

照片打印機

2011-08-03 13:25:19

布線系統規劃

2010-03-09 12:23:30

Python編碼

2010-08-20 11:22:48

DB2性能調優

2009-12-24 18:03:35

WPF線程渲染

2010-01-26 16:54:58

學習C++

2010-08-13 14:40:14

DB2性能調優

2009-06-18 08:46:56

微軟Windows 7操作系統

2010-01-11 16:19:05

C++ Builder

2010-07-05 14:41:21

SQL Server數

2023-05-29 18:33:30

得物H5容器

2010-08-20 14:15:08

DB2性能調優

2016-03-22 15:05:00

定性移動數據開源
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩中文字幕视频 | 久久久国产一区 | 日本 欧美 三级 高清 视频 | 亚洲精品美女视频 | 欧美精品久久久久 | 天天操天天干天天爽 | 国产在线麻豆精品入口 | 久久久久久91香蕉国产 | 国产亚洲一区二区三区在线观看 | 久久精品国产亚洲 | 蜜桃视频一区二区三区 | 男女爱爱福利视频 | 777zyz色资源站在线观看 | 欧美综合久久 | 国产一区| julia中文字幕久久一区二区 | 欧美大片黄| 免费毛片网 | 综合在线视频 | 国产一区二区三区不卡av | 亚洲精品在线91 | 亚洲欧洲在线观看视频 | 亚洲综合精品 | 欧美a在线看| www.99热| 精品亚洲一区二区三区四区五区 | 中文字字幕一区二区三区四区五区 | 国产精品我不卡 | 亚洲精品一区中文字幕乱码 | 久久精品亚洲成在人线av网址 | 影音先锋中文字幕在线观看 | 国产一级影片 | 国产一区二区三区四区 | 国产伦一区二区三区视频 | 黑人精品欧美一区二区蜜桃 | 精品1区2区 | 欧美日韩一卡 | 国产在线精品一区二区三区 | 国产伦一区二区三区 | 中文字幕在线观看www | 亚洲+变态+欧美+另类+精品 |