
208
|
5 章 右辺値参照、ムーブセマンティクス、完全転送
(type generation)、typedef とエイリアス宣言の使用と作成、 decltype である。
•
参照の圧縮が発生する場面でコンパイラが参照の参照を生成すると(参照を表す参照)、単一
の参照となる。元の参照のうち 1 つでも左辺値参照ならば結果は左辺値参照となり、そうで
なければ右辺値参照となる。
•
ユニヴァーサル参照とは、左辺値と右辺値と区別する型推論および参照の圧縮場面での右辺
値参照である。
項目 29:ムーブ演算は存在しない、コスト安でもない、使用もされ
ないと想定する
C++11 で最大の目玉機能がムーブセマンティクスであることはまず間違いありません。「コンテナ
のムーブは、現代ではポインタのコピー程度のコストなのだ!」、「一時オブジェクトのコピーは、
現代ではとても効率が良く、これを避けるコーディングは早計な最適化に等しいのだ!」そんな言
葉も耳にしたことがあるでしょう。このような情動的な文言は受け入れられやすいものです。ムー
ブセマンティクスは真に重要な機能です。コスト高なコピー演算を比較的コスト安なムーブ演算に
単に置き換え可能にするばかりか、実際にそうすることがコンパイラの要件とされています(適切
な条件が満たされていれば)。手元の C++98 コードを C++11 準拠のコンパイラと標準ライブラリで
リコンパイルすれば shazam ! 10 これまでよりも高速に動作します。
性能を引き出せるムーブセマンティクスに ...