
項目 25:右辺値参照には std::move を、ユニヴァーサル参照には std::forward を用いる
|
171
業より通常は望ましいのです。
重要ポイント
•
関数テンプレートの仮引数の型が、推論した型 T に対する T&& の場合、または auto&& によ
り宣言したオブジェクトの場合は、その仮引数やオブジェクトはユニヴァーサル参照である。
•
宣言した型の形式が厳密に type&& でない場合、または型の推論を伴わない場合は、type&&
は右辺値参照を表す。
•
右辺値により初期化したユニヴァーサル参照は右辺値参照に対応する。また、左辺値により
初期化したユニヴァーサル参照は左辺値参照に対応する。
項目 25:右辺値参照には std::move を、ユニヴァーサル参照には
std::forward を用いる
右辺値参照がバインドするのはムーブ可能なオブジェクトのみです。右辺値参照の仮引数があれ
ば、そのバインドするオブジェクトはムーブ可能であると判断できます。
class Widget {
Widget(Widget&& rhs); // rhs definitely refers to an
… // object eligible for moving
}; rhs は間違いなくムーブ可能オブジェクト
右辺値という性質を活用できるようオブジェクトを関数へ渡す必要がある場合は、オブジェクト
にバインドされた仮引数を右辺値へキャストします。項目 23 でも述べましたが、このキャストは、
std::move ...