青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

woaidongmao

文章均收錄自他人博客,但不喜標題前加-[轉貼],因其丑陋,見諒!~
隨筆 - 1469, 文章 - 0, 評論 - 661, 引用 - 0
數據加載中……

什么元素可以作為模板參數的實參

在C++中模板分為兩大類別:類模板和函數模板。這兩種類別的模板在語法形式上是相同
的,只是各自存在一些特別的約束。那么什么樣的C++元素可以作為實參來替換模板中的形參
呢?這里又主要分成兩大類實參類型:
    1. 類型實參
       類型實參實際上就是C++中間的各種各樣的數據類型,包括POD類型和類類型。比如:
       char、int、int*、int&、float和用戶定義的類型。
      
    2. 非類型實參
       非類型實際上就是值的意思,而要作為模板實參的值就必須是一個常量值,更準確
       的說就必須是一個在編譯期能夠確定的值(簡稱編譯期常量),然而編譯期常量在
       C++中包含了非常廣泛的概念,也不是所有的編譯期常量都可以作為模板的實參的,
       也就是僅僅只有編譯期常量的一個子集可以作為模板實參,那么什么編譯期常量可
       以作為模板實參呢?主要有三種類型的編譯期常量:
          a. 整型常量
             在C++中所謂的整型包括char、short、int、long、long long、上述類型的
             無符號類型、wchar_t、enum類型。其中要注意的是float和double類型是不
             可以作模板實參的(在C++0x標準中會改變這一狀況)。
          b. 函數地址
             函數地址主要包括非成員函數地址、成員函數地址、靜態成員函數地址。
          c. 具有外部引用的字符串數組
             什么是具有外部引用的字符串數組呢?就是具有如下形式:
                 extern char cstr[]; // 可以初始化,如:extern char cstr[] = ""
                                     // char也可以是wchar_t
             需要注意的是extern char *cstr;所聲名的是一個指針而不是一個數組,所
             以不能夠用作模板的實參。那么在作為模板實參的時候是采用了cstr所包含
             的字符串值作為模版實參的嗎,其實不是,雖然cstr是一個字符串,其實在
             作為模板實參是僅僅用到了cstr的地址,也就是說如下的定義是合法的:
                 extern char cstr1[] = "cstr";
                 extern char cstr2[] = "cstr";
                
                 template<char *V> struct CTemplateValue {};
                 // 或者 template<char V[]> struct CTemplateValue {};
                 template<> struct CTemplateValue<cstr1> {};
                 template<> struct CTemplateValue<cstr2> {};
             上面的代碼中,cstr1和cstr2都包含有相同的字符串值,但是在作為模板實參
             時并沒有參考cstr1和cstr2的內容,而是依賴于其地址,所以可以進行模板的
             特化,而不出現重復特化的編譯時錯誤。         
       總的來說這里上面的三種常量都是編譯期常量,對于第一種情況是比較好理解的,而
       對于第二三種請款可能就不那么直觀了,為什么函數地址和外部引用的字符串是編譯
       期常量呢?首先我們來解釋一下編譯器在編譯函數和全局外部引用的變量時會如何處
       理這兩者的地址,以使得其他的代碼或模塊能夠順利地找到該地址并調用函數或引用
       變量。
       首先可以肯定的是編譯器必須為函數和全局外部引用的變量生成唯一的入口地址,否
       則就無法引用了;
       其次編譯器會生成什么樣的地址呢?地址分為:物理地址(PA)和虛擬地址(RVA),
       目前編譯器一般不會生成物理內存地址的,因為基本上所有的程序在操作系統調度運
       行時均不可能保證該物理內存地址可以被分配給該程序使用(可能已經被其他的程序
       占用了),那么現在的編譯器均會選擇生成RVA地址,其實RVA地址是相對于程序載入
       首地址的一個偏移常量(offset),那么操作系統在載入程序時僅僅需要修改程序的
       載入首地址就可以完成程序的載入,而程序內部在調用一個函數或引用變量時會采用
       首地址+RVA地址的方法來完成引用,這樣一來RVA就成為了一個編譯期的整型常量了,
       所以函數地址和全局外部引用字符串的地址就成為了編譯期的常量,可以作為模板實
       參了。那為什么必須是外部引用的字符串數組呢?內部引用的字符串數組不可以么?
       如果對此有興趣可以關注后續相關內外部引用的討論blog。

Feedback

# re: 什么元素可以作為模板參數的實參  回復  更多評論  

2007-06-01 12:29 by walkspeed
快出后續呀。

如果推論的話,內部字符串是個非編譯器常量啦。

這種分析很透徹,不光停留在表面上,而且講清楚了其在編譯時的特性。模板本來就是用來控制編譯期的。所以對編譯器在編譯期的了解越深刻,也容易理解模板編程。

非類型實際上就是值的意思,而要作為模板實參的值就必須是一個常量值,更準確
的說就必須是一個在編譯期能夠確定的值(簡稱編譯期常量)。記住這句話

# re: 什么元素可以作為模板參數的實參  回復  更多評論  

2007-06-04 14:08 by picasa
分析的挺好

posted on 2008-08-31 21:53 肥仔 閱讀(585) 評論(0)  編輯 收藏 引用 所屬分類: C++ 模板

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产精品video| 99re66热这里只有精品3直播| 99国产一区| 免费观看成人| 欧美成人精品三级在线观看 | 午夜日韩激情| 亚洲综合色网站| 午夜视黄欧洲亚洲| 亚洲日本欧美日韩高观看| 黄色成人av网| 亚洲美女91| 亚洲一区欧美二区| 久久精品国产精品亚洲综合| 久久久www成人免费精品| 久久天堂精品| 99视频+国产日韩欧美| 亚洲综合不卡| 欧美ed2k| 国产婷婷色一区二区三区四区| 国产日韩在线不卡| 亚洲女优在线| 巨胸喷奶水www久久久免费动漫| 亚洲人精品午夜在线观看| 久久国内精品视频| 亚洲国产日韩欧美在线图片 | 亚洲综合丁香| 99视频热这里只有精品免费| 午夜精品免费| 欧美日韩精品在线视频| 在线精品亚洲一区二区| 欧美一区二区在线免费观看 | 国产午夜精品美女视频明星a级| 99re6热只有精品免费观看| 免费观看久久久4p| 在线视频日本亚洲性| 老司机凹凸av亚洲导航| 激情欧美一区二区| 免费在线亚洲欧美| 美女免费视频一区| 亚洲精品久久久久中文字幕欢迎你 | 精品99一区二区| 欧美日韩一二三四五区| 亚洲第一页中文字幕| 欧美在线观看一区| 99国产精品视频免费观看| 亚洲东热激情| 久久av资源网站| 欧美黄色成人网| 久久精品国产久精国产爱| 欧美精品一区二区三区四区 | 最新国产精品拍自在线播放| 欧美成人午夜视频| 欧美四级剧情无删版影片| 先锋影音一区二区三区| 久久成人免费电影| 一区二区三区免费网站| 欧美在线免费观看| 亚洲色图综合久久| 久久精品99无色码中文字幕| 一本到12不卡视频在线dvd| 亚洲免费小视频| 9l视频自拍蝌蚪9l视频成人| 亚洲一区二区精品在线观看| 国模一区二区三区| 亚洲伦理在线观看| 在线观看成人av电影| 亚洲日本免费电影| 亚洲精品麻豆| 尤物精品在线| 亚洲一区三区电影在线观看| 亚洲精品精选| 欧美1区2区3区| 欧美成人激情视频免费观看| 国产精品视频一| 亚洲淫性视频| 久久er精品视频| 国产精品一区二区三区久久久| 亚洲国产成人tv| 亚洲精品一区久久久久久| 欧美3dxxxxhd| 亚洲精品在线三区| 亚洲视频一区二区免费在线观看| 久久综合给合久久狠狠狠97色69| 蜜桃久久av| 日韩亚洲精品视频| 欧美日韩一区二区在线播放| 日韩视频免费观看| 欧美一级视频免费在线观看| 国产精品一区一区三区| 久久精品视频免费观看| 亚洲黄色一区| 久久av红桃一区二区小说| 伊人狠狠色丁香综合尤物| 欧美激情精品久久久六区热门 | 亚洲伦理中文字幕| 欧美精品在线一区| 欧美韩国一区| 亚洲乱码视频| 校园激情久久| 亚洲国产天堂久久综合| 国产精品久久久久av免费| 欧美精品在线观看| 日韩视频一区二区三区在线播放 | 久久久久国产精品厨房| 欧美一级片久久久久久久| 欧美一区二区日韩一区二区| 老鸭窝毛片一区二区三区| 欧美激情在线有限公司| 国产精品视频大全| 91久久精品国产91久久| 亚洲欧洲精品一区| 久久久水蜜桃av免费网站| 亚洲韩国精品一区| 午夜精品久久久久久久| 欧美成人免费大片| 国产在线视频欧美一区二区三区| 在线电影国产精品| 久久久精品国产免费观看同学| 免费一级欧美在线大片| 一本色道久久综合亚洲91| 久久久亚洲人| 好看不卡的中文字幕| 午夜精品理论片| 在线视频精品| 国产精品日韩一区二区| 一区二区欧美亚洲| 亚洲黄色在线| 欧美精品系列| 一区二区三区四区国产精品| 亚洲国产婷婷香蕉久久久久久| 久久婷婷蜜乳一本欲蜜臀| 国产欧美综合在线| 9色porny自拍视频一区二区| 久久综合色播五月| 午夜精品视频网站| 国产精品丝袜xxxxxxx| 久久精品成人一区二区三区| 久久嫩草精品久久久久| 91久久黄色| 久久亚洲一区二区| 国产一区二区三区久久久| 一本大道久久a久久综合婷婷| 久久久久久999| 久久久欧美精品| 一本色道久久综合| 欧美美女bb生活片| 久久久一区二区| 亚洲图片欧洲图片日韩av| 午夜精品区一区二区三| 国产精品成人一区二区三区夜夜夜 | 久久成人免费| 黄色av日韩| 狼狼综合久久久久综合网| 欧美专区18| 亚洲三级免费电影| 亚洲级视频在线观看免费1级| 久久综合电影| 亚洲欧美日本另类| 免费一区视频| 久久青草欧美一区二区三区| 欧美成人午夜激情视频| 欧美成人亚洲成人| 亚洲二区免费| 欧美激情一区在线观看| 亚洲免费电影在线观看| 亚洲级视频在线观看免费1级| 亚洲精品中文字| 好吊妞**欧美| 午夜精品av| 国产精品午夜久久| 亚洲一区国产精品| 亚洲破处大片| 一色屋精品视频在线观看网站| 老司机成人网| 国产精品久久久91| 麻豆精品精品国产自在97香蕉| 欧美中文在线字幕| 国产亚洲精品aa午夜观看| 久久精品视频免费观看| 久久国产99| 国产一区二区黄| 亚洲高清视频的网址| 日韩一级不卡| 性欧美在线看片a免费观看| 国产精品乱码一区二区三区| 国产精品自拍网站| 在线综合亚洲欧美在线视频| 亚洲欧美在线免费观看| 国产一区二区三区四区hd| 久久午夜影视| 亚洲天堂网站在线观看视频| 欧美α欧美αv大片| 亚洲一区欧美激情| 91久久精品视频| 欧美大片第1页| 久久久无码精品亚洲日韩按摩| 亚洲午夜国产成人av电影男同| 国产精品对白刺激久久久| 亚洲一区二区三区三| 久久精品毛片|