2011-01-01から1ヶ月間の記事一覧

C++0x における NRVO

C++0x において、関数の戻り値に、関数内部のローカル変数を「そのまま」帰す場合を考えます: std::string f() { std::string s = "hoge"; return s; } この場合、戻り値として使われるローカル変数 s は、自動的に move されます。 つまり、以下のコードは…

std::pair の range access がいつの間にか規格から消えていた件

cpprefjp の std::pair の項目を下書きしてて気がついたんですが、 いつの間にか std::pair の Range Access が規格から消えていました: std::multimap<int, std::string> m = { { 0, "hoge" }, { 1, "fuga" }, { 1, "piyo" }, { 2, "foo" }, }; // equal_range のような イテ</int,>…

ラムダ式の参照キャプチャは基本的に安全である

ラムダ式ネタをもう一つ。こっちは少々マニアックな内容です。 C++0x におけるラムダ式は、 int f( std::vector<int> const& v1, std::vector<int> const& v2 ) { int sum = 0; auto add_to_sum = [&](int x){ sum += x; }; std::for_each( v1.begin(), v1.end(), add_</int></int>…

ラムダ式の型を取得する

C++0x から新たに C++ に追加された要素に、ラムダ式というものがあります。 これは、ちょっとした関数を、その場で定義して使えるようにしたもので、 #include <vector> #include <numeric> #include <iostream> int main() { std::vector<double> v = { -1, 2, 1.5, -4 }; double prod = std::</double></iostream></numeric></vector>…

C++0x 標準ライブラリ完全解説 〜 No.03 std::move_if_noexcept,

該当規格: 20.3.3 forward/move helpers [forward], N3225 http://sites.google.com/site/cpprefjp/reference/utility/move_if_noexcept C++0x 標準ライブラリ完全解説の三回目です。 今回は解説することも少ないので、さっさと書いてしまうことにします。 …

C++0x 標準ライブラリ完全解説 〜 No.02 std::move,

該当規格: 20.3.3 forward/move helpers [forward], N3225 http://sites.google.com/site/cpprefjp/reference/utility/move 少し間隔があいてしまいましたが、 C++0x 標準ライブラリ完全解説の二回目です。前回の記事では、 C++98/03 の時点から変わらない…

std::forward は Perfect Forward にのみ使われるとは限らない

http://d.hatena.ne.jp/gintenlabo/20110108/1294485577#c で、 #include <utility> template<class F, F f> class il_ptr_fun; template<class R, class... Args, R (*pf)(Args...)> struct il_ptr_fun<R (*)(Args...), pf> { typedef R result_type; R operator()( Args... args ) const { return (*pf)( std::forward</r></class></class></utility>

C++0x で関数へのポインタによるコールバックをインライン化する

お題 http://d.hatena.ne.jp/Cryolite/01000831#p1 を C++0x によって実現してみる。 解答1 Variadic Templates を使う。 #include <utility> template<class F, F f> class il_ptr_fun; // とりあえず関数ポインタだけ template<class R, class... Args, R (*pf)(Args...)> struct il_ptr_fun<R (*)(Args...), pf> { typedef R result_type; R ope</r></class></class></utility>…

C++0x 標準ライブラリ完全解説 まとめ

No.00 Introduction (2011-01-07 更新) No.01 namespace rel_ops, utility (2011-01-07 更新) No.02 std::move, utiliy (2011-01-16 更新) No.03 std::move_if_noexcept, utiliy (2011-01-17 更新) No.04 std::swap, utiliy (次回予定)

C++0x 標準ライブラリ完全解説 〜 No.01 namespace rel_ops,

該当規格: 20.3.1 Operators [operators], N3225 http://sites.google.com/site/cpprefjp/reference/utility/rel_ops さて、それでは早速、具体的なライブラリに移っていこうと思います。 とはいえ、初回から飛ばすのもアレなので、まずは軽いものを、 とい…

C++0x 標準ライブラリ完全解説 〜 No.00 Introduction

はじめに 現在 FDIS 制定に向けて着々と作業が進められてる C++ の次世代規格、通称 C++0x では、 今までの C++ で使いにくかった部分を、より便利に扱えるよう、様々な改良が行われています。 この改良は、言語コア部分の改良のみにとどまるものでは当然 な…

新年あけましておめでとうございます。

今年が C++ にとって良い年でありますように。 2010年 元旦 銀天すばる