タグ

lvalueに関するfimbulのブックマーク (5)

  • C++ なんとかvalues - すいバカ日誌

    C++には lvalue やら rvalue やらたくさんありますが、混乱している人もいるかもしれないのでめちゃくちゃ簡単にまとめておきます。 多分間違ってるところがあると思うので、その時は教えて下さい。よろしくお願いします。 lvalue 簡単にいえば左辺にして代入できるもののことです。*1 named object (名前があるオブジェクト)と言ったほうがいいかもしれませんね。 ( int& foo() { return i; } foo() = 1; とか書けますよね。) template <typename T> void f(T& t) { std::cout << "T&" << std::endl; } // lvalue reference template <typename T> void f(T&& t) { std::cout << "T&&" << std::en

    C++ なんとかvalues - すいバカ日誌
  • 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

  • rvalue reference、move semanticsに挫折した人のための再入門解説 - Ideals and Reality

    この記事は C++11 Advent Calendar 14日目の記事です。 何がわかりにくいのか C++11から正式に導入される新機能である、move semanticsとrvalue referenceですが、なかなかこれを理解出来ないという人が多いようです。 ちょっと考えればなるほど、と思いますが私が思うにこのわかりにくい最大要因はやはりその名前のせいかと思います。 特にrvalue referenceですが、日語に訳すと右辺値参照という呼ばれ方をしています。 そもそも右辺値や左辺値という名称はC言語時代の流れでそのまま引き継いでいるものであり、右辺値参照という名称は言わば後付けで名称されたものです。 実際に使用する際に右辺値なのか左辺値なのかを意識している人は殆どおらず、これが余計な混乱を招いているのではないかと思います。 ではコードを書いてみて理解しましょう。 lvalueとr

    rvalue reference、move semanticsに挫折した人のための再入門解説 - Ideals and Reality
  • 何が lvalue で何が rvalue なのか - iorate's blog

    こういう記事も必要かもしれないと思いました.内容はタイトルそのままです. はじめに はじめに,と書きましたがこの項は飛ばしても問題ないです. まず "lvalue" とか "rvalue" とかいうものが何についての概念なのかということですが,これらは C++ の "式" の持つ属性 "value category" の値です."式" には他に "型" という属性があります. int i = 0; i; // 式 i の型は int,value category は lvalue 0; // 式 0 の型は int,value category は rvalue 型の決め方は難しくないと思うので (たぶん),この記事では value category の決め方を書きます.以降,"i は int の lvalue である" といった言い方をします. Lvalue,rvalue のイメージ い

    何が lvalue で何が rvalue なのか - iorate's blog
  • 1