stdテンプレートライブラリの本を読んでいて、STLコンテナの章に記載されている以下の詳細と混同しています。 どうやら、それはSTDをspecfies :: VECTOR運用と効果std :: vectorまたは任意のオブジェクトの移動コンストラクタを呼び出すタイミングをC++コンパイラが決定する方法
Operation Effect
vector<Elem> c(c2) | Copy constructor; creates a new vector as a copy of c2 (all elements are copied)
vector<Elem> c = c2 | Copy constructor; creates a new vector as a copy of c2 (all elements are copied)
vector<Elem> c(rv) | Move constructor; creates a new vector, taking the contents of the rvalue rv (since C++11)
vector<Elem> c = rv | Move constructor; creates a new vector, taking the contents of the rvalue rv (since C++11)
どうやら、excatly彼らは呼ばれている移動とコピーコンストラクタの両方の構文に違いは、ありませんか?コピーコンストラクタの
おかげ
明示的な 'std :: move'呼び出しがなければ、それはコンパイラによって異なります。仕様にはいくつかのルールがあるかもしれませんが、AFAIKはほとんどがコンパイラに任されています。 r値を渡すと、コンパイラーはスマートになり、移動コンストラクターを呼び出します。 –
また、変数を初期化するとき、 '='を使用しても、割り当てを後で行うときと同じ方法ではないことにも注意してください。例: 'int a = 5;'は*初期化*ですが、 'int a; a = 5; 'は*割り当て*です。 –
@JoachimPileborg私の混乱は、コンパイラが移動コンストラクタまたはコピーコンストラクタを呼び出すことを決定するときです。呼び出しは両方とも同じです – LearningCpp