• <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>

            MyMSDN

            MyMSDN記錄開發(fā)新知道

            將數(shù)組作為實(shí)參傳遞

            在C++中我們應(yīng)該少用指針,多用引用,原因請大家自行搜索。在傳遞數(shù)組的時(shí)候我們需要格外注意,先讓我們看一個(gè)簡單的范例。

            // PassArray.cpp : 定義控制臺應(yīng)用程序的入口點(diǎn)。
            //
            
            #include "stdafx.h"
            #include <iostream>
            
            using namespace std;
            
            template <typename T>
            void Func1(T, T);
            template <typename T>
            void Func2(T&, T&);
            void Func3(int (&)[10], int (&)[12]);
            
            int _tmain(int argc, _TCHAR* argv[])
            {
                int a[10], b[12];
            
                Func1(a, b);
                Func2(a, b);
                Func3(a, b);
            
                return 0;
            }
            
            template <typename T>
            void Func1(T, T)
            {
                cout<<"Func1.invoked!"<<endl;
            }
            template <typename T>
            void Func2(T&, T&)
            {
                cout<<"Func2.invoked!"<<endl;
            }
            void Func3(int (&m)[10], int (&n)[12])
            {
                cout<<"Func3.invoked!"<<endl;
            }

            首先這個(gè)范例無法編譯通過:

            error C2782

            原因就出在類型推斷上。根據(jù)定義,F(xiàn)unc2的類型必須是T&,也就是說傳遞實(shí)參的時(shí)候,兩個(gè)形參必須是相同的,而這一點(diǎn)在模板編程中就會由編譯器來負(fù)責(zé)推斷。

            Func1:

            調(diào)用Func1(a, b)則推斷的類型分別是Func1(int*, int*),調(diào)用函數(shù)將會自動(dòng)將數(shù)組的首地址指針作為實(shí)參進(jìn)行傳遞,因此類型推斷兩形參相同,編譯通過!

            Func2:

            調(diào)用Func2(a, b)因?yàn)槲覀兿M匆玫姆绞竭M(jìn)行實(shí)參傳遞,因此需要遵循這樣的規(guī)律:

            (P208)如果形參是數(shù)組的引用,編譯器將不會將數(shù)組實(shí)參轉(zhuǎn)化為指針,而是傳遞數(shù)組引用的本身。在這種情況下,數(shù)組大小成為形參和實(shí)參類型的一部分。

            所以推斷類型分別是Func2(int (&)[10], int (&)[12]),因?yàn)閕nt (&)[10] != int (&)[12],所以與T == T相悖!自然也就編譯不過了!

            Func3:

            該函數(shù)是Func2的一個(gè)靜態(tài)表示,通過上面的解釋應(yīng)該很容易理解這個(gè)代碼了。

            posted on 2009-02-19 21:35 volnet 閱讀(1722) 評論(0)  編輯 收藏 引用 所屬分類: C++ Primer 學(xué)習(xí)筆記

            特殊功能
             
            99久久精品免费观看国产| 久久久精品午夜免费不卡| 亚洲国产成人久久笫一页| 伊人久久大香线蕉综合热线| 亚洲AV无码成人网站久久精品大| 国产精品欧美久久久天天影视| 国产成人精品久久亚洲高清不卡 | 久久www免费人成看片| 精品久久久久一区二区三区| 国内精品久久久久久久97牛牛| 久久久久99精品成人片牛牛影视| 精品久久无码中文字幕| 综合久久久久久中文字幕亚洲国产国产综合一区首 | 麻豆一区二区99久久久久| 99久久精品免费国产大片| 亚洲午夜久久久久久久久久| 欧美大战日韩91综合一区婷婷久久青草| 国产色综合久久无码有码| 久久精品国产精品亚洲人人| 久久婷婷国产麻豆91天堂| 久久天天躁狠狠躁夜夜躁2O2O| 色偷偷88欧美精品久久久 | 无夜精品久久久久久| 精品久久久久久久久久中文字幕 | 欧洲精品久久久av无码电影| 日日狠狠久久偷偷色综合免费| 91精品国产91久久| 精品久久久久久无码中文字幕| 国产精品久久久久jk制服| 久久人人爽人人爽人人片av高请| 2021国内久久精品| 亚洲人成伊人成综合网久久久| 久久精品国产久精国产一老狼| 怡红院日本一道日本久久 | 久久香综合精品久久伊人| 亚洲午夜无码AV毛片久久| 午夜精品久久久久久| 久久只有这里有精品4| 99久久国产综合精品女同图片 | 一本一本久久A久久综合精品| 久久婷婷人人澡人人爽人人爱|