• <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記錄開發新知道

            將數組作為實參傳遞

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

            // PassArray.cpp : 定義控制臺應用程序的入口點。
            //
            
            #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;
            }

            首先這個范例無法編譯通過:

            error C2782

            原因就出在類型推斷上。根據定義,Func2的類型必須是T&,也就是說傳遞實參的時候,兩個形參必須是相同的,而這一點在模板編程中就會由編譯器來負責推斷。

            Func1:

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

            Func2:

            調用Func2(a, b)因為我們希望按引用的方式進行實參傳遞,因此需要遵循這樣的規律:

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

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

            Func3:

            該函數是Func2的一個靜態表示,通過上面的解釋應該很容易理解這個代碼了。

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

            特殊功能
             
            狠狠色丁香久久综合五月| 久久频这里精品99香蕉久| 99蜜桃臀久久久欧美精品网站 | 日韩人妻无码精品久久久不卡| 2021国内精品久久久久久影院| 久久婷婷五月综合色高清 | 精品午夜久久福利大片| 激情五月综合综合久久69| 亚洲日韩欧美一区久久久久我 | 精品蜜臀久久久久99网站| 久久国产精品视频| 亚洲午夜久久久影院伊人| 精品久久久久久| 久久WWW免费人成一看片| 久久成人国产精品一区二区| 亚洲va久久久噜噜噜久久男同| 国产精品热久久无码av| 亚洲AV无码久久| 中文字幕无码久久精品青草 | 99热成人精品热久久669| 9999国产精品欧美久久久久久| 亚洲精品乱码久久久久久蜜桃| 久久婷婷国产麻豆91天堂| 久久丫精品国产亚洲av| 无码国内精品久久人妻麻豆按摩| 久久精品国产精品亚洲精品| 亚洲中文字幕无码一久久区| 欧美精品福利视频一区二区三区久久久精品 | 久久99国产精品久久久 | 亚洲精品tv久久久久| 久久精品亚洲男人的天堂| 婷婷久久综合九色综合98| 久久久亚洲欧洲日产国码aⅴ| 欧美久久一级内射wwwwww.| 久久精品成人欧美大片| 精品久久久久久久中文字幕| 亚洲狠狠综合久久| 国产高潮国产高潮久久久91| 国产福利电影一区二区三区久久久久成人精品综合 | 国产午夜精品理论片久久影视| 久久精品无码午夜福利理论片|