C++左参照と右参照解析

1461 ワード

C++11では、Rvalue Reference(右参照)という概念が導入されています.Rvalue Referenceは、Rvalue(右値)にバインドされたReferenceです.では、Lvalueが生成される場合と、Rvalueが生成される場合と、関数が返す参照オブジェクト、割り当て、配列[]について、参照解除、prefix++/--これらの操作はLvalueを返すことができ、Lvalue Referenceを使用してバインドすることができます.関数が非参照オブジェクト、数値計算、関係演算、ビット演算を返す場合、postfix++/--これらの操作はRvalueを返すことができ、Rvalue Referenceを使用してバインドすることができます.
Rvalue ReferenceはObject&&で表されます.
int i = 42;
int &&r = i; //error,i   Lvalue
int &&r2 = i * 2; //ok,        ,Rvalue Reference    

C++LvalueとRvalueの意味を理解し、Lvalue Persist;Rvalue Are Ephemeral(『C++Primier』).つまり、Rvalue Referenceは一時的なオブジェクトにバインドされます.いわゆる「一時的」は、1.これらのオブジェクトはdestroyedによって、2.これらのオブジェクト変数はその後使用されません.しかし、これらのオブジェクトエンティティの内部には、これらのオブジェクトの「一時的」属性に鑑みて、これらのRvalueのリソースを「盗む」ことができます.これにより、リソースの効率的な利用が可能になり、コード効率の向上やコンピュータリソースの利用率の向上に役立ちます.コード最適化の際には必ず考慮する必要があります.
LvalueとRvalueについて、もう一つ理解しにくいのはVariables Are Lvalueです.
int &&rr1 = 42; //ok,42     Rvalue
int &&rr2 = rr1; //error, rr1       Lvalue
私が理解していると、実際には、関数のように返される非参照オブジェクト、2つの数の演算結果を発見することができます.これらの返された値は、私たちが再び値を割り当てなければ、これらの返された値は実際には「キラキラ」の結果であり、あるいは、コンピュータを支援するための「中間状態」であり、Rvalueと呼ばれています.我々は1つの変数(var)でそれを積載することはできない.我々はRvalue Referenceしか使用できない.一方、Rvalue Reference変数がRvalueを積載した後、この変数自体は実際にはすでにLvalueであり、彼が積載したRvalueとは異なる.Rvalueは一時的であり、その用途は「より効率的な利用のためにリソースが盗まれた」である.ああ、使い終わったら役に立たない、destroyedに.しかし、それを運ぶRvalue Reference変数は、自分のscopeを離れるまでdestroyedされない変数です.