xjf gcc-4.8.0.tar.bz2 $ cd gcc-4.8.0 $ mkdir build $ cd build $ ../configure --prefix=/usr/local/gcc --disable-shared --disable-multilib \ --enable-threads --enable-__cxa_atexit --enable-languages=c,c++ \ --disable-nls --enable-libstdcxx-time=rt $ make -j 4 BOOT_CFLAGS=-O2 bootstrap $ make install $ make clean PATH に を入れて、 に以下を追加。 /usr/local/gcc/bin /etc/manpath.config MANPATH_MAP /usr/local/gcc/bin /usr/local/gcc/share/man Better types int32_t とか C++11 でも使えるようになった。 http://en.cppreference.com/w/cpp/types/integer その他、型安全な enum や nullptr や Better types in C++11 tuple/tie も便利 http://en.cppreference.com/w/cpp/utility/tuple move named return value optimization 勝手にやる。move constructor があれば。 関数呼び出し等では名前がついているときは しないといけない。 std::move() 自分で move constructor を定義するときは、例外を投げないようにするべき。絶対。 Move constructors To make strong exception guarantee possible, user-defined move constructors should not throw exceptions. In fact, standard containers typically rely on std::move_if_noexcept to choose between move and copy when container elements need to be relocated. Rvalue References and Exception Safety std::unique_ptr や 等 move をサポートしているオブジェクトの所有権をどう渡すかはこの記事が良くまとめている。 std::thread If you mean for a function to claim ownership of a unique_ptr, take it by value. If you mean for a function to simply use the unique_ptr for the duration of that function's execution, take it by const&. Alternatively, pass a & or const& to the actual type pointed to, rather than using a unique_ptr. If a function may or may not claim ownership (depending on internal code paths), then take it by &&. But I strongly advise against doing this whenever possible. How do I pass a unique_ptr argument to a constructor or a function? 短く言うと、引数も返り値も値渡しで書けばいい。
} void g(std::thread t) { ... t.join(); } int main() { std::thread t = create_thread(); g( std::move(t) ); // forget about t return 0; } noexcept 役立たずの 指定の代わりに、 が指定できるようになった。 throw noexcept コンパイル時に例外を投げないことを保証するわけではないが、コンパイラは例外を投げないこと前提としたコードを生成する。 また、仕様の記述としての意味もあり、たとえば は resize 時に move コンストラクタが noexcept で std::vector あるなら move し、そうでないならコピーする。move コンストラクタに noexcept を指定するのは、有用だろう。 noexcept specifier noexcept operator move_if_noexcept string to/from integer std::stoi 文字列を数値に。もちろん不正なら例外飛ぶ。 std::to_string 数値を文字列に。 chrono libstdc++ の実装では、 は の alias。 high_resolution_clock system_clock 使い方:gist lambda クロージャーも作れるよ、もちろん。キモイけど。 http://en.wikipedia.org/wiki/Anonymous_function#C.2B.2B Capturing this The capture of this is special. It can only be captured by value, not by reference. this can only be captured if the closest enclosing function is a non-static member function. The lambda will have the same access as the member that created it, in terms of protected/private members. If this is captured, either explicitly or implicitly, then the scope of the enclosed class members is also tested. Accessing members of this does not require explicit use of this-> syntax.