遅レスすいません。
右辺値参照周りを自分でも見直してきたんですが、
最終的に「vecの要素」に所有権を押し付けるコードは↓で正しいのでしょうか?
void add(vector<int> &&x){
vec.push_back(std::move(x));
};
・std::forwardを使う場合は、型がテンプレートの場合(フォワーディング参照の場合)に使うのが一般的であって、
上では具体的な型(vector<int>)を指定しているので、forwardを使う場合に当てはまらない。
・vector<int> &&xとして引数を受け取っても(右辺値参照として引数を受け取っても)、
右辺値参照自体は左辺値になるので、
vec.push_back(x)としてしまうと、呼ばれるpush_backは push_back(const T&)であり、所有権が移譲されない。
なので、ここでもmoveする必要がある(vec.push_back(std::move(x))
この理解であってますか?
C++相談室 part161
■ このスレッドは過去ログ倉庫に格納されています
14859
2022/06/06(月) 03:12:54.60ID:hkI7oR+t■ このスレッドは過去ログ倉庫に格納されています
