したがって、コピーコンストラクタのパラメータリストは、const B& x
のようなconst値の参照で構成されます。 しかし、移動コンストラクタのパラメータリストは、B&& x
のようなrvalue参照で構成されています。rvalueの参照とconstの左辺の参照との間の混乱
私はこれを発見したとき、それは私には奇妙に思えたので、私は、引数としてのconst左辺値の参照を取る関数を定義しようとした:
void calculator(const Intvec& veccor)
{
cout << "in veccor" << veccor.m_size << "\n";
}
私はすでにのconst左辺値参照は何に結合することができることを知っていました、その結果は期待されたものでした。私は両方と左辺値と右辺値とし、期待通りに機能を呼び出してみました、それはすべてが働いた:
calculator(Intvec(33)); //works
Intvec newvec(22);
calculator(newvec); //works
を私は、右辺値参照にcalculator
のパラメータリストを変更しようとしました、そして予想通り、唯一の右辺値は働いていましたそれを呼び出すとき。
const lvalue参照はlvaluesとrvaluesの両方を引数として取ることができるので、なぜ移動コンストラクタはrvalue参照の代わりにconst lvalue参照を使用するだけではありませんか? そして、通常、常に左辺値参照を使用するのではなく、移動コンストラクタで起こっていることと同じことをしない場合のように、
これは 'const'なので、その内容を"盗む "ことができる前にconstをキャストしなければなりません。また、(値が移動される)実際には 'const'と宣言され、未定義の振る舞いに導くことがあります。 –