タグ

rvalueとC++0xに関するtyruのブックマーク (5)

  • 右辺値参照の簡単入門 | taro-nishinoの日記 | スラド

    C++0xが09年までに正式制定が出来ず、先送りになったことは皆さんも御存知だと思います。どういう裏事情があったのか、部外者である私は知りませんし、関心もありません。いいものを作り上げるためにじっくりとやってもいいと思います。 ただ一つだけ言いたいことは、moveコンストラクタだけはもっと早い時期に切り離して、出来れば部分的改訂のC++03に盛り込んで欲しかったという気持ちがあります。少しでも大きなオブジェクトを扱うアプリケーションをC++で書いた経験のある人ならお分かりでしょうが、コピーの高い代償には当に悩まされて来たものです。極端なことを言えば、効率性(実行速度及びメモリ使用率)重視でなければ、あんな難しいC++言語を使うのは阿呆らしいです。ですから、コピーコンストラクタを出来得る限り走らせないよう、工夫しながら書くのは非常なストレスを感じます。しかも、殆どの場合、コピーコンストラク

  • rvalue Reference is not an rvalue

    rvalue referenceは、rvalueではない。私は今まで、これを深く考えたことはなかった。一体どういうことなのか。 int a ; // Error int && b = a ; // OK. the same thing std::move() does. int && c = static_cast< int && >(a) ; // Error. Why? int && d = c ; bはエラーになるのは、常識でも理解できる。しかし、なぜdがエラーになるのか。まったく同じ型ではないか。また、こんな例もある。 // lvalue reference void f( int & ) {} // rvalue reference void f( int && ) {} int main() { int x = 0 ; int && ref = std::move(x) ; /

  • 和訳:Rvalue References: C++0x Features in VC10, Part 2 - ntnekの日記

    Stephan T. Lavavej のRvalue References: C++0x Features in VC10, Part 2の適当な訳です。左辺値と右辺値、無駄なテンポラリが生成される問題、新たな参照「右辺値参照」の特徴と使い方、ムーブセマンティクスの意味と使い方、完全転送パターンの書き方、それらを可能にする仕組みと、これに関する C++0x の新たな文法ルールについて書かれています。 特に前半は、この手の記事としてはこれまでで一番分かりやすく丁寧に解説されていると思います。正直よく分かっていなかったんですけど、これを読んでだいぶスッキリしました。 で、ムーブセマンティクスによるテンポラリの除去が日用品のように使えるようになれば、LinusLinux カーネル開発者たちが「C++なんてクソ言語は使えねぇ!」と主張する(正当な)理由の一つを崩すことができますね。これを機会

    和訳:Rvalue References: C++0x Features in VC10, Part 2 - ntnekの日記
  • rvalue reference 補足

    前回、rvalue reference 完全解説なる記事を書いた所、ある程度の反響を得た。このような個人のブログでは、数人が思う所を書けば、まあ、ある程度の反響と言って差し支えないのである。 しかるに、皆rvalue referenceの理解に苦しんでいる様子だ。果たしてあの解説が至らなかったのであろうか。しかし、あの解説は、これ以上ないくらい簡単に書いたはずである。 実際、value referenceは、名前の通りのrvalueへのreferenceに過ぎぬのだし、std::move()とstd::forward()は、キャストに過ぎぬのだ。std::move()は、rvalueへのキャストであり。std::forward()は、lvalueをlvalueへ、rvalueをrvalueへキャストするのである。それだけのことなのである。 しかし、現実に理解に苦しんでいる者がいる。これは一

  • 本の虫: rvalue reference 完全解説

    目的 この記事は、C++0xのrvalue referenceを完全に解説せんとする目的を以て書かれた。サンプルコードは最小に留め、エラー処理等は省いた。この記事さえ読めば、今日からrvalue referenceを恐れることなく使う物のC++0xプログラマになれるだろう。 lvalueとrvalueについて Cの時代では、lvalueとrvalueの違いは、代入演算子の左側か右側かという違いだけであった。つまり、left hand value, right hand valueの略である。従って、訳語も、左辺値、右辺値であった。C++においては、これはもはや正しくはない。従って、右辺値、左辺値というのも、誤訳である。それ故に、ここでは、これ以上、左辺値、右辺値という名称を使用しない。 誤解を恐れずにいえば、lvalueとは、明示的に実体のある、名前付きのオブジェクトであり、rvalue

  • 1