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

posts - 28, comments - 179, trackbacks - 0, articles - 1
  C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

什么元素可以作為模板參數(shù)的實參

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

Feedback

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

2007-06-01 12:29 by walkspeed
快出后續(xù)呀。

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

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

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

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

2007-06-04 14:08 by picasa
分析的挺好
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            日韩视频一区二区三区| 亚洲欧美日韩一区二区在线 | 亚洲午夜精品久久| 在线亚洲国产精品网站| 亚洲夜间福利| 久久精品人人做人人爽| 欧美高清视频一区| 一本色道久久综合亚洲精品不卡| 99在线|亚洲一区二区| 亚洲一区三区在线观看| 久久久国产91| 欧美日韩亚洲一区三区 | 久久精品一区二区三区不卡牛牛| 久久亚裔精品欧美| 欧美日一区二区在线观看 | 伊人狠狠色j香婷婷综合| 亚洲国产精品激情在线观看| 日韩午夜激情av| 久久精品噜噜噜成人av农村| 亚洲第一在线视频| 在线亚洲观看| 蜜桃伊人久久| 国产亚洲精品一区二区| 99国产精品一区| 麻豆av福利av久久av| 一区二区三区欧美日韩| 久久综合色播五月| 国产精品日韩在线| 99re在线精品| 麻豆精品国产91久久久久久| 亚洲一区二区三区影院| 欧美成人xxx| 伊人婷婷欧美激情| 欧美一区二区三区在线视频| 亚洲日韩欧美视频一区| 久久午夜色播影院免费高清| 国产九九视频一区二区三区| 在线综合视频| 欧美激情视频在线播放| 欧美中文字幕第一页| 国产精品护士白丝一区av| 久久久亚洲人| 国产午夜精品美女视频明星a级 | 午夜精品美女久久久久av福利| 欧美精品v国产精品v日韩精品| 韩国一区二区三区在线观看| 欧美一区二视频| 亚洲香蕉伊综合在人在线视看| 欧美理论电影在线播放| 亚洲国产一区二区三区高清| 免费在线成人| 久久欧美中文字幕| 伊人夜夜躁av伊人久久| 久久亚洲风情| 久久久久欧美| 亚洲电影在线播放| 麻豆亚洲精品| 裸体歌舞表演一区二区| 亚洲国产精品第一区二区三区| 欧美成人午夜| 欧美大片在线看免费观看| 亚洲黄色成人网| 最新精品在线| 欧美色网在线| 亚洲欧美日本国产专区一区| 亚洲午夜精品久久| 国产日韩欧美二区| 狼狼综合久久久久综合网| 久久精品国产一区二区三| 伊人久久大香线蕉av超碰演员| 欧美成年人视频网站| 欧美精彩视频一区二区三区| 亚洲午夜精品一区二区三区他趣| 亚洲婷婷免费| 黄色日韩网站| 亚洲黄色免费| 国产精品久久夜| 久久五月婷婷丁香社区| 欧美成人性生活| 亚洲免费视频成人| 久久成人精品一区二区三区| 在线观看中文字幕不卡| 亚洲精品日韩在线观看| 国产欧美va欧美va香蕉在| 免费观看亚洲视频大全| 欧美日韩国产精品自在自线| 久久国产精品72免费观看| 蜜桃久久av一区| 性欧美精品高清| 久久综合一区二区三区| 亚洲一区在线视频| 久久亚洲色图| 亚洲欧美在线免费观看| 免费观看成人www动漫视频| 午夜欧美不卡精品aaaaa| 免费不卡亚洲欧美| 香蕉成人伊视频在线观看| 久久午夜精品一区二区| 亚洲免费伊人电影在线观看av| 久久亚洲精品视频| 午夜久久久久久| 欧美女同在线视频| 伊人久久亚洲影院| 这里只有精品丝袜| 91久久精品日日躁夜夜躁欧美| 亚洲免费一区二区| 一区二区高清在线观看| 噜噜噜躁狠狠躁狠狠精品视频 | 国产亚洲视频在线| 最新国产成人av网站网址麻豆 | 136国产福利精品导航网址| 亚洲一二三区精品| 亚洲视频在线一区| 欧美不卡一区| 免费影视亚洲| 狠狠色丁香婷综合久久| 亚洲永久免费视频| 亚洲一区二区三区精品在线| 欧美黑人在线观看| 欧美顶级大胆免费视频| 国内久久婷婷综合| 亚洲女优在线| 亚洲欧美激情一区| 欧美日韩在线播放三区| 亚洲激情视频在线| 亚洲国产精品国自产拍av秋霞| 欧美一区二区三区喷汁尤物| 小处雏高清一区二区三区| 欧美视频在线观看| av不卡在线看| 亚洲永久网站| 国产精品欧美久久久久无广告| 9国产精品视频| 亚洲一区在线免费| 国产乱子伦一区二区三区国色天香| 亚洲精品在线二区| 亚洲一区视频在线| 国产精品性做久久久久久| 亚洲免费影视第一页| 久久九九国产精品怡红院| 黑人巨大精品欧美黑白配亚洲| 欧美一区二区性| 可以看av的网站久久看| 在线高清一区| 欧美精品一卡二卡| 亚洲最新视频在线| 午夜精品久久久久久久| 国产热re99久久6国产精品| 欧美亚洲一区二区在线| 免费观看日韩av| 99re6热只有精品免费观看 | 久久久久久尹人网香蕉| 免费中文字幕日韩欧美| 亚洲精选在线观看| 国产精品国产馆在线真实露脸| 亚洲免费视频网站| 麻豆精品国产91久久久久久| 亚洲精品你懂的| 欧美亚一区二区| 性色av一区二区怡红| 欧美福利专区| 亚洲视频在线二区| 国产综合色在线| 欧美成人精品一区| 亚洲自拍偷拍视频| 日韩亚洲一区二区| 欧美午夜不卡影院在线观看完整版免费 | 性欧美1819sex性高清| 欧美成人免费大片| 亚洲伊人第一页| 在线精品视频一区二区三四| 欧美日韩精品系列| 久久精品中文字幕免费mv| 亚洲国产综合在线看不卡| 性感少妇一区| 99视频超级精品| 韩国女主播一区二区三区| 欧美精品1区2区3区| 欧美在线观看网址综合| 夜夜爽99久久国产综合精品女不卡 | 久久精品最新地址| 亚洲午夜电影在线观看| 在线成人av网站| 国产精品久久久久久久第一福利 | 亚洲欧美日韩一区二区在线| 在线观看一区欧美| 国产精品在线看| 欧美色欧美亚洲另类七区| 免费不卡欧美自拍视频| 欧美在线观看天堂一区二区三区| 9l视频自拍蝌蚪9l视频成人| 欧美成人精品高清在线播放| 欧美在线国产| 亚洲视频第一页| aⅴ色国产欧美| 亚洲三级电影在线观看| 尤物精品国产第一福利三区 | 亚洲主播在线观看| 一二三区精品福利视频| 亚洲黄色三级|