C++::新しいプロパティの参照


C+::参照
前言:引用はC++がCに基づいて導入した新しい概念で、今日は引用を分析して、この新しい概念にどんな優位性と欠点があるかを見てみましょう.
1:コンセプト
                 ,           num,             refnum,    refnum num         。

2:参照変数の作成
       C,C++ &         ,           。          ,&        ,           

例:
int num;
int & refNum=num;           //      
 int&    int     ,         num refNum  ,             。

3:参照とポインタ
                ,                。
  ①:              ,              。      const  ,         ,           ,        。

  ②:                ,              ,             。

4:参照の用途
  ①、        :

             ,                     ,               。

                                :
void Swap(int a, int b)       //   
{
    int tmp;
    tmp = a;
    a = b;
    tmp = b;
}
void pSwap(int *a, int *b)     //   
{
    int tmp = *a;
    *a = *b;
    *b = tmp;
}
void refSwap(int &a, int &b)   //    
{
    int tmp = a;
    a = b;
    b = tmp;
}
                               ,                  ,                            ,                       ,                 ,        ,              。   

注記:実際の参照パラメータが一致しない場合、パラメータがconst参照タイプC++の場合、一時変数が生成されます.
次の例を確認します.
int refCube(const int &ra)
{
    return ra*ra*ra;
}
int main()
{
    int a = 3;
    long a1 = 3L;
    int len[] = { 1, 2, 3, 4, 5 };
    int ret1 = refCube(a);
    int ret2 = refCube(a1);
    int ret3 = refCube(len[2]);
    int ret4 = refCube(3);
    cout << "ret1:" << ret1   << endl;
    cout << "ret2:" << ret2 << endl;
    cout << "ret3:" << ret3 << endl;
    cout << "ret4:" << ret4 << endl;
    return 0;
}

(http://img.blog.csdn.net/20160709110355476) (http://img.blog.csdn.net/20160709110407534)
逆アセンブリコードに移動すると、パラメータがconst参照タイプの次の2つの場合、関数を呼び出すと一時変数が発生することがわかります.
a、実パラメータタイプは正しいが、左の値にはできない.//ret 3,ret 4 b,実パラメータタイプは正しくありませんが、左の値として使用できます.//ret2
実パラメータタイプが正しく、左の値として使用できる場合、一時変数は生成されません.
②:参照を関数として返す値
  int Add(int a, int b)         //       
{
    int tmp = a + b;
    return tmp;
}
int& Addr(int a1, int b1)     //      
{
    int tmp = a1 + b1;
    return tmp;
}  

次に、逆アセンブリコードを見てみましょう.(http://img.blog.csdn.net/20160709111822540)
したがって,2つの結論を得ることができる:1,一時変数の参照を返さないでください.2、戻りオブジェクトが関数の役割ドメインを出ても存在する場合は、より効率的になるため、参照戻りを使用します.