C++::新しいプロパティの参照
C+::参照
前言:引用はC++がCに基づいて導入した新しい概念で、今日は引用を分析して、この新しい概念にどんな優位性と欠点があるかを見てみましょう.
1:コンセプト
2:参照変数の作成
例:
3:参照とポインタ
4:参照の用途
注記:実際の参照パラメータが一致しない場合、パラメータがconst参照タイプC++の場合、一時変数が生成されます.
次の例を確認します.
(http://img.blog.csdn.net/20160709110355476) (http://img.blog.csdn.net/20160709110407534)
逆アセンブリコードに移動すると、パラメータがconst参照タイプの次の2つの場合、関数を呼び出すと一時変数が発生することがわかります.
a、実パラメータタイプは正しいが、左の値にはできない.//ret 3,ret 4 b,実パラメータタイプは正しくありませんが、左の値として使用できます.//ret2
実パラメータタイプが正しく、左の値として使用できる場合、一時変数は生成されません.
②:参照を関数として返す値
次に、逆アセンブリコードを見てみましょう.(http://img.blog.csdn.net/20160709111822540)
したがって,2つの結論を得ることができる:1,一時変数の参照を返さないでください.2、戻りオブジェクトが関数の役割ドメインを出ても存在する場合は、より効率的になるため、参照戻りを使用します.
前言:引用は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、戻りオブジェクトが関数の役割ドメインを出ても存在する場合は、より効率的になるため、参照戻りを使用します.