2014年9月7日日曜日

rvalue参照

さて、便利な便利なrvalue参照ですが、そもそもこれはどういう考え方、
どういうパラダイムなんでしょうね?

C、C++98、C++11について考えてみましょう。
それぞれ、以下の扱いが存在します。
  • C、値とポインタ
  • C++98、値とポインタと参照
  • C++11、値とポインタと参照とrvalue参照
参照とは、プログラムの構文的には値として扱いながら、
関数呼び出しでは参照渡しで高速にやりとりをするために
考えられた物です。

ポインタでも同等の高速化は行えます。ですが、そのためには、
既存プログラムを修正して&などを付け直す必要がありました。

参照を使えばライブラリを使うアプリのプログラムはそのままに、
ライブラリなどの、クラスのメンバ関数のヘッダやコードだけを
参照渡しに変更するだけで高速に動くようになります。
やったね、C++。

しかし、ここで壁が現れます。もっともっと高速化したいのに、
参照渡しの値を壊していいのかどうか言語内に定義されていないから、
参照渡しの値を壊す高速化ができない!!!

後は、簡単ですね。高速化ジャンキーのためのC++11では、
壊していい参照をrvalue参照として言語自体に取り込みました。
これで皆ハッピー^^

0 件のコメント:

コメントを投稿