これは,C++11 Advent Calendar 2011 参加記事です.現在,開催されている Advent Calendar の一覧は Advent Calendar 2011 (jp) 開催予定リスト - Life like a clown を参照下さい.
C++11 (C++0x) に関しての情報は 本の虫 や Faith and Brave - C++で遊ぼう でかなり詳細な記述がありますので,情報を探す場合は site:cpplover.blogspot.com や site:d.hatena.ne.jp/faith_and_brave 辺りを指定してググってみると良いかもしれません.この記事でも,該当ブログの記事をメインにリンク集を作成しています.
尚,自分の理解が追い付いてないものや見逃したもの等があるので,結構な抜けがあるかと思います.
概要
ざっと概要を知りたい場合は,Wikipedia か @wraith13 さんの発表資料 辺りが良いかと思います.
型推論・型指定子 (auto, decltype)
auto は右辺値の型を推論してくれる機能,decltype は式の演算結果の型を取得する機能となります.
初期化構文 (initializer_list)
std::vector 等の STL コンテナの初期化が,一つずつ push_back などのようにしなくとも {} (波括弧) で一括して行えるようになる機能です.これに合わせて,全ての初期化が {} (波括弧) で統一できるようにもなるようです.尚,リスト初期化は同じ型しか渡せないという制限があるようで,任意の数の違う型の引数を指定する場合は Variadic Templates を代わりに使う事になるようです.
Range-based for 文
他プログラミング言語によくある foreach 文に相当するものです.
rvalue reference, および Move Semantics
C++03 での問題点の一つとしてよく挙げられていた「コピーされすぎ(コピーコンストラクタが実行されすぎ)」を緩和する事を目的の一つとして導入された機能です.名称等の問題もあって馴染みにくい機能ですが,第 3 者にライブラリを提供する立場にある開発者であれば,これから必須となって来る機能だろうと思います.
定数式 (constexpr)
コンパイル時に実行される関数を定義できるようになると言うもの.constexpr 指定のものであれば swtich 文の case にも使用できるようになりので,これまでマクロで行われていた部分が代替可能になる可能性があります.ただし,記述する関数本体に厳しい制限があるので,実装するのが大変になる場合があるかもしれません.
可変長引数テンプレート (Variadic Templates)
Boost.PP さん死んでしまうん?
ライブラリ
C++11 で新規に導入されるライブラリ群に関するリンク.C++11 で新規に導入されたライブラリの多くは Boost C++ Libraries から採用されたものであるため,Boost C++ Libraries の該当ライブラリの説明も参考になります.また,いくつかのものは TR1 (Technical Report 1) として,コンパイラによっては既に実装されている事もあります.
文字列・数値の相互変換
boost::lexical_cast() を用いて行っていた文字列・数値の相互変換関数群.
スマートポインタ
unique_ptr, shared_ptr, weak_ptr
スレッド
タプル型
std::pair の拡張版.std::tuple
ハッシュテーブル
日付・時間
C++0x から Boost へ逆輸入された珍しい例.そのため,Boost には Boost.DateTime と Boost.Chrono と言う 2 種類の日付・時間を扱うライブラリが存在しています.
参照ラッパ
型特性 (type_traits)
関数の戻り値の型 (result_of)
メンバ関数アダプタ (mem_fn)
エラー情報のサポート (system_error)
その他
単体の章を設けるかその他のサブ項目にするかについては,完全に私の主観で行ってますので,いろいろあるかとは思いますがまぁ・・・反応を見ながら移した方がいいかなと判断した場合は変更するかもしれません.
NULL ポインタ (nullptr)
NULL が意図せず int 型に推論されないようにするための修正.
ユーザ定義リテラル
final, および override 指定
テンプレートの別名付け (Template Aliases)
template クラスの typedef.実際には typedef ではなく using と言うキーワードを使うようです.
例外を送出しないことの明示 (noexcept)
C++03 までは,デストラクタ等によく throw() と書いていた部分に相当するものです.C++11 で例外指定が deprecated になったので,その代わりと言う感じでしょうか.
コンパイル時 assert (static_assert)
assert() のコンパイル時版.BOOST_STATIC_ASSERT() と言うマクロがありましたが,これが言語機能としてサポートされたと言う感じでしょうか.
関数の戻り値の後置
decltype との併用で便利な場面が出てくると言った感じでしょうか.
明示的な型変換
キャスト演算子とも言われていますが,これに explicit キーワードを付けられるようになるようです.explicit キーワードの付いた型変換用演算子を使用する場合は,(Type)x のように変換後の型を明示的に記述する必要があります.
委譲コンストラクタ
あるコンストラクタから,同じクラスの別のコンストラクタが利用できるようになるようです.
メンバ変数の初期値の指定
C# 辺りで馴染みのあるメンバ変数の定義部分での初期化が可能になるようです.