C++0xに関するkash1waのブックマーク (3)

  • 本の虫: rvalue reference 完全解説

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

  • 関数ポインタの型に名前を付ける - Faith and Brave - C++で遊ぼう

    C++03だと関数ポインタの型に名前を付けるのにtypedefを使用していましたが typedef double (*analysis_fp)(const vector<Student_info>&); 型名analysis_fpが真ん中にあるのでとてもわかりにくいです。 C++0xのalias declarationでは型の別名をusingと=を使用して書くことができるので以下のように書けます。 using analysis_fp = double (*)(const vector<Student_info>&); こっちの方がわかりやすいので、C++0xではtypedefよりもusingを使うことをオススメします。 N1489 Templates aliases for C++

    関数ポインタの型に名前を付ける - Faith and Brave - C++で遊ぼう
  • C++0x enumの先行宣言 - Faith and Brave - C++で遊ぼう

    C++0xでは、structやclassと同様に、enumも先行宣言できるようになります。 以下のようなヘッダーファイルがあった場合 // Color.h enum Color { /* 多くの列挙子... */ }; void draw(Color& color); draw関数の宣言にはColor内の列挙子を必要としませんが、 C++03ではenumを先行宣言することができないので Colorの列挙子を変更したら関連する全てのファイルの再コンパイルが必要になります。 C++0xでは、enumの先行宣言が許可されるので、 以下のように書くことができるようになります。 // Color.h enum Color : int; void draw(Color& color); // Color.cpp enum Color : int { /* 多くの列挙子... */ }; void dr

    C++0x enumの先行宣言 - Faith and Brave - C++で遊ぼう
    kash1wa
    kash1wa 2009/03/18
    ベース型を指定できるようになるのはいいな。
  • 1