
166
|
5 章 右辺値参照、ムーブセマンティクス、完全転送
重要ポイント
•
std::move は右辺値への無条件キャストを実行するのみであり、自身では何もムーブしない。
•
std::forward は実引数が右辺値にバインドされている場合に限り、その実引数を右辺値へ
キャストする。
•
std::move も std::forward もプログラム実行時には何も実行しない。
項目 24:ユニヴァーサル参照と右辺値参照の違い
人は真実により解放されると言いますが1、状況が適切ならば周到な嘘でもやはり解放されるので
す。本項目はこの種の嘘です。しかしソフトウェアを扱う以上は「嘘」などという言葉は使わず、本
項目は「抽象化」すると言いましょう。
ある型 T の右辺値参照を宣言するには、T&& と記述します。このためソースコードに「T&&」と記
述されているのを見れば、これは右辺値参照だと受け取るのは当然に思えます。しかし、あぁなん
としたことか、事はそう簡単ではありません。
void f(Widget&& param); // rvalue reference
右辺値参照
Widget&& var1 = Widget(); // rvalue reference
auto&& var2 = var1; // not rvalue reference
右辺値参照ではない
template<typename T>
void f(std::vector<T>&& param); // rvalue reference
template<typename ...