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

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

Feedback

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

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

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

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

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

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

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>
            亚洲伊人网站| 欧美一级成年大片在线观看| 免费在线一区二区| 在线观看三级视频欧美| 免费看的黄色欧美网站| 欧美va天堂va视频va在线| 亚洲精品午夜精品| 亚洲精品一区中文| 欧美午夜大胆人体| 久久gogo国模裸体人体| 久久久久久久综合| 日韩亚洲综合在线| 亚洲先锋成人| 亚洲第一天堂av| 亚洲人成7777| 国产精品久久久久久影视| 久久激情网站| 欧美国产日韩一区二区| 亚洲天堂免费在线观看视频| 亚洲欧美综合精品久久成人| 影音先锋一区| 亚洲视频一区二区免费在线观看| 国产亚洲精品bt天堂精选| 亚洲成色777777在线观看影院| 欧美另类videos死尸| 欧美一级电影久久| 葵司免费一区二区三区四区五区| 亚洲午夜羞羞片| 欧美在线资源| 一区二区三区色| 久久久久久9| 亚洲在线电影| 免费日韩一区二区| 久久精品盗摄| 欧美日韩国产免费| 美国三级日本三级久久99| 欧美午夜片在线观看| 美国十次了思思久久精品导航| 欧美三级电影精品| 亚洲电影在线看| 国产婷婷精品| 中文欧美字幕免费| 亚洲精品少妇30p| 久久精品综合一区| 欧美一二三视频| 欧美日本成人| 亚洲国产精品一区二区尤物区| 国产欧美欧洲在线观看| 亚洲精品黄色| 亚洲精品国产精品国产自| 欧美一区=区| 欧美一区二区三区在线视频| 欧美日韩成人综合在线一区二区 | 欧美日韩福利在线观看| 免费日韩视频| 精久久久久久久久久久| 午夜精品福利视频| 亚洲专区免费| 欧美视频一区二区三区四区| 91久久精品一区| 日韩午夜在线观看视频| 免费观看30秒视频久久| 欧美成人精品一区二区| 在线日韩成人| 久久综合影音| 亚洲国产成人久久综合| 亚洲黄色小视频| 免费日韩精品中文字幕视频在线| 美日韩免费视频| 亚洲国产欧美精品| 欧美第十八页| 亚洲精选在线| 亚洲欧美一区二区在线观看| 国产精品扒开腿做爽爽爽软件| 日韩一级在线| 午夜精品久久久久久久久久久久| 国产精品xxxxx| 亚洲午夜av电影| 久久狠狠亚洲综合| 在线精品视频免费观看| 免费精品视频| 亚洲三级电影全部在线观看高清| 这里只有精品视频| 国产精品久久久久久福利一牛影视| 亚洲视频精选| 久久一区二区三区国产精品 | 国产精品一区二区在线| 亚洲一区一卡| 免费在线一区二区| 99在线|亚洲一区二区| 国产精品国产三级国产a| 午夜欧美电影在线观看| 乱中年女人伦av一区二区| 亚洲激情欧美激情| 欧美日韩三区| 久久久福利视频| 日韩一级大片| 久久久欧美精品sm网站| 999在线观看精品免费不卡网站| 欧美日韩精品免费观看视一区二区 | 亚洲一区二区三区在线看 | 国产欧美大片| 牛牛影视久久网| 亚洲色在线视频| 蜜臀91精品一区二区三区| 一区二区三区精品| 国产一区二区三区电影在线观看| 免费高清在线视频一区·| 亚洲一区二区欧美| 亚洲欧洲午夜| 久久精品人人做人人综合| 夜夜精品视频一区二区| 狠狠入ady亚洲精品经典电影| 欧美激情中文不卡| 久久国产精品色婷婷| 亚洲伦理自拍| 欧美成人免费全部观看天天性色| 亚洲欧美日韩精品久久奇米色影视 | 欧美粗暴jizz性欧美20| 亚洲欧美一区二区精品久久久| 亚洲大片一区二区三区| 久久久亚洲午夜电影| 亚洲综合另类| 中文精品视频一区二区在线观看| 一区二区三区在线看| 国产精品日本精品| 欧美日韩亚洲91| 母乳一区在线观看| 久久久久久伊人| 亚洲欧美日韩精品| 亚洲一区视频在线| 日韩亚洲欧美一区二区三区| 亚洲第一精品久久忘忧草社区| 久久经典综合| 欧美中文字幕在线播放| 亚洲永久精品大片| 一本色道久久综合狠狠躁篇怎么玩| 亚洲大片av| 精品白丝av| 在线播放中文字幕一区| 国产精品欧美在线| 国产精品亚洲成人| 国产精品久久久久久影视| 欧美特黄视频| 国产精品尤物福利片在线观看| 国产精品高清免费在线观看| 欧美日韩免费观看中文| 欧美视频中文在线看| 国产精品久久久久9999吃药| 欧美日韩中文字幕精品| 欧美三区在线视频| 欧美日韩三级在线| 欧美麻豆久久久久久中文| 欧美日韩三级视频| 国产精品毛片高清在线完整版| 国产精品视频999| 国产午夜精品久久久| 狠狠色综合日日| 亚洲电影自拍| 日韩午夜在线电影| 午夜精品一区二区三区在线| 亚洲欧美精品在线| 久久久久久日产精品| 欧美成年人在线观看| 亚洲精品国产精品久久清纯直播 | 亚洲男人天堂2024| 久久久久国产免费免费| 欧美粗暴jizz性欧美20| 欧美日韩国产黄| 国产精品一区二区久激情瑜伽| 狠狠综合久久av一区二区老牛| 亚洲欧洲日韩女同| 亚洲无人区一区| 久久久噜久噜久久综合| 欧美激情精品久久久久久| 一本色道精品久久一区二区三区| 午夜精品剧场| 欧美激情按摩在线| 国产日本欧美一区二区三区| 亚洲激情图片小说视频| 欧美夜福利tv在线| 欧美激情综合| 亚洲欧美日本视频在线观看| 久久综合色婷婷| 国产精品久久一级| 亚洲国产美国国产综合一区二区| 亚洲综合日本| 欧美黄色aaaa| 午夜一区二区三区不卡视频| 麻豆精品一区二区综合av| 国产精品久久久久久模特| 亚洲激情成人网| 久久精品国产第一区二区三区最新章节| 免费欧美日韩| 欧美伊人精品成人久久综合97| 欧美精品一区二区三区四区| 一区免费视频| 久久精品亚洲一区二区三区浴池| 亚洲人在线视频| 麻豆精品在线视频|