以下のコードでは、最初の電話mkme = mvme_rv
はT& operator=(const T&&)
に発送されません。rvalue referenceでmoveを呼び出さなければならないのはなぜですか?
#include <iostream>
#include <string>
#include <vector>
using namespace std;
using T = vector<int>;
int main()
{
T mvme(10, 1), mkme;
T&& mvme_rv = move(mvme); // rvalue ref?
mkme = mvme_rv; // calls T& operator=(const T&)?
cout << mvme.empty(); // 0
mkme = move(mvme_rv); // calls T& operator=(const T&&)?
cout << mvme.empty(); // 1
}
'mvme_rv'の型は' T'の値を参照していますが、その変数にその変数を使用すると、左辺値に過ぎません。 – skypjack
"rvalue reference"と "rvalue"を区別します。 –
命名式は常にlvlauesです。rvalue参照は、rvaluesにバインドする参照であり、lvalue参照はlvalues(主に)にバインドする参照です。その意味で、右辺値参照は、これまで存在していなかった言語に汎用の左辺値から右辺値への変換を追加する新しい言語機能です。明らかに、 –