例Aで使用されている移動セマンティクスは必須であり、どの構造が優れていますか?私はいつもコンストラクタでstd :: moveを使うべきですか?
例A:
struct A
{
std::string a;
A(std::string a) : a(std::move(a)){ }
};
例B:
struct B
{
std::string b;
B(const std::string& b) : b(b){ }
};
私はこれが重複質問であるとは考えていません。私は具体的にどのクラスのコンストラクタでメンバ初期化を使用する観点から優れているかを尋ねています。他の質問に記載されている例や回答のいずれも、会員の初期化については触れられていません。
コンストラクタが参照パラメータで呼び出され、そのメンバにコピーされているのが好きではありません。複数のコピー操作を行うのは無駄かもしれないようです。
データをできるだけ効率的にメンバーにパイプしたいが、コンストラクタのパラメータとしてrvaluesを使用したくない。
値が 'int'または他の単一値のプリミティブである場合、' move'または参照(constなど)を使用すると無意味です。また、明示的なコンストラクタのない構造体がこの場合に優れていると考えています。 – ShadowRanger
例を簡略化するために 'int'を使用しました。それが 'std :: string'や他のもっと複雑なクラスだったら、どちらが優れていますか? (私の答えを編集し、 'int'を' std :: string'に変更しました) –
[std :: move()とは何か、そしていつ使うべきでしょうか?](http://stackoverflow.com/questions)/3413470/what-is-stdmove-when-be-be-be-used-use) – chbchb55