
160
|
5 章 右辺値参照、ムーブセマンティクス、完全転送
にくい性質にも精通できます。ムーブ演算の驚くほど変化に富んだ動作の性質についても、その差
異を理解できるでしょう。これらのことすべてが収まるところに収まり、合点が行きます。ここま
で到達できれば、出発点に立ち返り、右辺値参照、ムーブセマンティクス、完全転送がきわめて直
観的で分かりやすく見えると改めて実感するでしょう。現時点では不透明な部分が残っていても構
いません。
本章の項目を読み進める際には、たとえその型が右辺値参照とされていても、仮引数とは常に左
辺値であるという点を心に刻み込んでおくことが特に重要です。次の例を考えてみましょう。
void f(Widget&& w);
上例の仮引数 w の型は左辺値です。Widget の右辺値参照と記述されているにも関わらずです(も
しこの点に驚愕するようであれば、左辺値と右辺値の概要を 「用語と表記」(xviii ページ)から読み
直してください)。
項目 23:std::move と std::forward を理解する
std::move と std::forward については、こう動作すると解説を進めるよりも、こう動作しない
と解説を進めた方が良いでしょう。std::move は何もムーブしませんし、std::forward は何も転
送しません。実行時には、どちらも何もしないのです。実行コードは 1 バイトたりとも生成されま
せん。
std::move と std::forward はキャストを実行する関数に過ぎません(実 ...