C++11-右参照

1986 ワード

C++のリファレンスでは、および存在するオブジェクトの新しい名前を作成できます.新しいリファレンスへのアクセスと変更操作は、そのプロトタイプ(リファレンスされたオブジェクト)に影響します.例:
int var = 2;
int& ref = var;
ref = 9;
// ref = 9;
// var = 9;

この方式は左値参照と呼ばれます.左値への参照です.左値という概念のソースはC言語で、割り当て式の左側に置くことができるもの、スタックまたはスタックに割り当てられた名前付きオブジェクト、または明確なメモリアドレスを持つ他のオブジェクトメンバーを指します.右値という概念もC言語から来ており、値は付与式の右側に現れるオブジェクト、例えば文字定数や一時変数である.したがって、左値参照は右値ではなく左値にバインドされます.たとえば、次のように書くのは間違っています.
//     
int& num = 1;

しかし、次の方法で右の値を参照できます.
const int& i = 1;

iはconstの左の値で、このように書くことができるのは、暗黙的な変換が発生したからです.左のconstリファレンスに対して一時的なオブジェクトを作成し、パラメータとして関数に渡すことができます.例:
void print(const string& s);
print("hello"); //   string   

C++11規格では、右値参照(rvalue reference)が紹介されています.この方法では、右値のみがバインドされ、左値はバインドされません.2つの&&によって宣言されます.
int&& i = 1;
int j = 42;
int&& k = j;    //    

したがって、関数のリロードによって、関数に左値または右値がパラメータである場合、同名で対応するパラメータが左値または値で参照されている関数にリロードできるかどうかを決定することができます.