この記事はから来ている式が参照を持っているだろう、なぜC ++? 。削除された侵略
割り当ては、「戻り値の代入式が参照型であるが、参照を持つことになります。これは、2つの質問が含まれている意味
- まず第一に、戻り値の代入式なぜ必要がありますか?表現チェーンの複製をサポートするために!
int a,b;
a = b = 1;
// 等号运算符是右结合的,相当于:
a = (b = 1);
実際には、戻り値はそれほど代入式の戻り値を持つように、Aに割り当てられ、B = 1です。
- なぜ値を返しますが、それへの参照を返していませんか?効率のために!そして、通常、一定の参照を返します。たとえば、割り当てた変数は、プリミティブデータ型ではなく、オブジェクト:
Obj a, b, c;
a = b = c;
B = Cが値を返す場合、それは端=オペレータに必要であり、戻り値に結果のコピーコンストラクタコピーを呼び出す(機能スタック領域の端部は、ローカル変数がスタック領域に格納されている間、破壊されるため)。あなたが参照を返す場合は、戻り値が直接、元の変数を参照するコール・複製する必要はありません。