C++11, 14の新機能

右辺値参照とムーブコンストラクタ

全333コースを10日間無料で

ぜひご覧ください。

無料で視聴する すべての加入プランを見る
または
このレッスンでは、破棄しても良い値を示す右辺値参照型と、その利用方法について説明します。
講師:
05:15

字幕

このレッスンでは、破棄しても 良い値を示す右辺値参照型とその利用方法について説明します。c++11 で追加された右辺値参照型とは、破棄しても良い値を示す型であり、無駄なコピーを抑えることのできる機能です。実際にどのような時に右辺値参照となるのか確認してみましょう。ここで右辺値参照を受け取る関数 f を定義します。ここでは整数型の右辺値参照を受け取ります。そして標準出力に move と出力します。またこの f のオーバーロードで、int の const 参照を受け取るオーバーロードも用意します。こちらは copy と出力します。この f に、いくつかの方法で引数を与えてどのような場合に右辺値参照が呼ばれるのか確認してみます。まずは f に整数リテラルをそのまま渡します。次に f に変数を与えてみます。また、f に整数を返す関数の返り値を与えてみます。実際にコンパイルして実行してみます。この通り move copy moveと出力されました。それぞれ13行目で move15行目で move が表示され、14行目では copyと表示されました。右辺値参照は破棄しても良い値を示す型です。13行目 15行目では与えられた数字は、関数の引数に渡された後即座に破棄されます。 そのため右辺値参照のオーバーロードが呼ばれました。一方 14行目で渡されてる i は、この main のスコープの中でこの後も生存している変数です。なので右辺値参照とはならずcopy のオーバーロードが呼ばれました。一方明示的に これは使わない変数だということを示す方法もあります。それは std::moveを使う方法です。std::move に変数を渡すと、その変数が右辺値参照として扱われます。実際にコンパイルして実行して確かめてみましょう。この通り std::moveが使われた箇所も、move と出力されるようになりました。なお右辺値参照は、copy あるいはconst 参照でも受け取るため例えばここで右辺値参照をオーバーロードした関数 f の定義を削除しても、コンパイル実行に問題はありません。右辺値参照が入った c++11 以降でも従来のコードは変更なく動作できます。ここでは整数型なのであまり右辺値参照の恩恵はありませんが、例えば std::vector は右辺値参照を受け取るコンストラクタを定義しその中ではコピーを行わず内部バッファをそのまま移動させます。またメモリーヘッダにあるstd::unique_ptr は、コピーコンストラクタとコピー代入演算子を削除しムーブコンストラクタとムーブ代入演算子のみ定義することによって移動はできるがコピーはできないリソース管理クラスを実現しました。 これらの例の通り右辺値参照は、標準ライブラリで広く既に使われています。クラスのムーブコンストラクタとムーブ代入演算子は暗黙定義されることもあり、意識しなくとも右辺値参照の恩恵を受けることができます。このレッスンでは、破棄しても良い値を示す右辺値参照型とその利用方法について説明しました。

C++11, 14の新機能

C++11,とC++14では大幅に機能追加が行われ、これまでのC++よりも遥かに快適なプログラミングが行えるようになりました。このコースではC++03からC++11とC++14で新たに追加された言語機能や標準ライブラリについて簡単に紹介します。進化したC++を知ってより快適にプログラミングを行うために、ぜひともこのコースをご覧ください。

1時間57分 (43 ビデオ)
現在、カスタマーレビューはありません…
 
ソフトウェア・トピック
価格: 2,990
発売日:2015年10月15日

このコースは、「オンデマンド」でご利用可能であり、ダウンロードすることもオンラインで見ることもできます。

ダウンロードすると、オフラインでコースを使用し、豊富なインターフェースをフルに活用できます。複数のデバイスを使用したり、 一度に全コースをダウンロードしたくない場合は、アカントにログインして、ストリーミング・ビデオとしてコースのレッスンを視聴してください。

ビデオトレーニングをお楽しみいただけますように! お問い合わせは、cs-jp@lynda.com宛までご連絡ください。