名前付き右辺値は左辺値です。無名の左辺値は右辺値です。これは、STD ::移動コールが必要である理由を理解することが重要である:foo&& r = foo(); foo f = std::move(r);
は、この答えを見てみましょう:https://stackoverflow.com/a/5481588/1394283それは非常によくそれを説明しています。
この機能を見てみましょう:
void foo(X&& x)
{
X anotherX = x;
// ...
}
興味深い質問がある:X
年代の過負荷がコンストラクタがfoo
の体内で呼び出さコピーしていますか?ここでは、x
はrvalue参照として宣言された変数です。したがって、x
自体も、値がX(X&& rhs);
のようにバインドする必要があります。
我々だけで移動し、そこから事は、それが、そのことであるため、移動sematicsが
X anotherX = x;
// x is still in scope!
のように、名前を持っている何かに暗黙のうちに適用できるようにすることは危険な混乱とエラーが発生しやすくなります私たちはちょうどpilfered、まだコードの次の行にアクセスすることができます。 しかし、移動セマンティクスの全体のポイントは、移動したものが移動した直後に死ぬという意味で「問題ではない」場合にのみ適用することでした。右辺値参照として宣言されている
物事は左辺値または右辺値になります右辺値参照の設計者はもう少し微妙なそれよりもソリューションを選択した理由です
。識別基準はで、名前がある場合は左辺値です。そうでなければ、それはrvalueです。
出典:http://thbecker.net/articles/rvalue_references/section_05.html
名前付き参照は左辺値です。 *常に*。 –
これは長いですが、[これは良い読書です](http://thbecker.net/articles/rvalue_references/section_01.html)は、価値評価についてのすべてを学びます。 –
R. Martino Fernandes:ありがとう!私は答えとしてそれを受け入れるだろう。 – Petter