C++0xの言語拡張まとめ(※随時更新)

C++0xの概要はこちら


Angle bracket
  テンプレートの連続した山カッコの問題の解決


初期化子リスト
  ユーザー定義のクラスで配列のような初期化構文を実装可能になる


Uniform initialization
  コンストラクタの構文と初期化子リストの構文が一様になる


デリゲーティング・コンストラクタ
  コンストラクタから他のコンストラクタを呼び出せる


auto
  型推論


記憶クラス指定子としての auto の削除
  autoキーワードの意味が変更になるため、下位互換がなくなる


decltype
  sizeofの型版


Template Aliases
  テンプレートを使用して型の別名を付けることができる。いわゆるtemplate typedef


拡張sizeof
  構造体/クラスのメンバをインスタンス化せずにsizeofすることが可能になる


nullptr
  ヌルポインタを表すキーワード追加


char16_t, char_32_t, raw string literal, UTF-8リテラル, 文字列リテラル中のユニバーサルキャラクタ名
  文字列関係。UTF-8/16/32, エスケープシーケンス無視


右辺値参照・ムーブセマンティクス(std::move, std::forward)
  一時オブジェクトのコストをなくし(減らし)、完璧な転送を実現する


メンバ関数のlvalue/rvalue修飾
  オブジェクトが左辺値の場合のみ呼べるメンバ関数、右辺値の場合のみ呼べる関数


コンセプト(late_check, Axiom)
  テンプレートのエラーメッセージを改善し、テンプレートの多くの手法を言語で総括的にサポートする


Range-base for文
  コンテナ, 配列をループするための新たなfor文


static_assert
  コンパイル時アサート


・constexpr(前編, 後編)
  定数式


ラムダ式
  匿名関数オブジェクトを生成するための式


Variadic Templates, Variadic Template Template Parameters
  可変引数テンプレート


Strongly Typed Enums
  スコープと強力な型付けを持ったenum


enumの先行宣言を許可


列挙子の最後のカンマ


メンバ初期化子(auto許可?)
  メンバ変数の新たな初期化


Defaulted and Deleted Functions
  コンパイラが自動的に生成する関数の制御


explicit conversion
  明示的な型変換


explicit bool
  "conversion to unspecified bool"というイディオムを言語でサポート


Default template arguments for function templates
  関数テンプレートのデフォルトテンプレート引数


新たな関数宣言構文, 統一された関数宣言構文(?)
  戻り値の型を後置する関数宣言構文


継承コンストラクタ
  派生クラスで基本クラスのコンストラクタを使用できる


ユーザー定義リテラル
  サフィックスを自作することができる。例えば2進数リテラル


Extern Template
  潜在的なテンプレートのインスタンス化を抑制


inline namespace
  透過的な名前空間


拡張friend宣言
  テンプレートパラメータとtypedef名をfriendにすることができる


alignof
  アライメントの指定と取得


無制限Union
  共用体(union)でクラスオブジェクトを持てる


thread_local
  スレッドローカル記憶域


ローカル型と無名型をテンプレート引数として使用
  関数内で作成したクラスのオブジェクトをvectorに保持したりできる


POD再考
  POD型の定義を見直し


SFINAE問題の解決
  今まであいまいだったSFINAEの仕様を明確化


一般化された属性
  コンパイラごとに存在する属性構文(__declspec, __attribute__, etc...)を一般化


POSIX用の名前空間を予約
  posix名前空間を予約


暗黙に削除される特殊メンバ関数
  デフォルトコンストラクタ、(以下略)が暗黙に定義されるとエラーになるクラスでは、delete扱いにする


ガベージコレクションと到達可能性ベースリーク検知の最小支援
  GCの最低限の決めごと


basic_stringの要素の連続性の保証


C99対応
  long long intとか可変引数マクロとか


最低限推奨される数
  テンプレートの再帰数とか




ライブラリ
TR1(Technical Report 1)
  主にBoostから移植されるライブラリ群(スマートポインタ, 乱数生成器, 正規表現...)


unordered_map / unordered_set
  ハッシュ表


chrono
  日付/時間ライブラリ


thread
  スレッドライブラリ


forward_list
  単方向リスト


More STL Algorithm
  追加されるSTLアルゴリズム


Placement Insert
  コンテナに要素を追加する際、コピーのコストをなくす


system_error
  OS固有のエラー情報を取得する


エラーハンドリング設計のガイドライン
  system_errorを使用したエラー通知の設計


Scoped Allocator Model
  コンテナ内のコンテナの各要素にアロケータを指定できる


enable_if
  コンパイル時条件によるオーバーロード


Numeric Convertion
  basic_stringと数値の相互変換(to_string, stoi, etc...)


可変引数min/max/minmax
  initializer_listによるmin/max/minmax関数


default_random_engine
  デフォルトの乱数生成器型


is_sorted
  範囲がソート済みか判定するアルゴリズム


vector::data, shrink_to_fit
  std::vectorに追加されるメンバ関数


map::at
  map::operator[] constの代わり


cbeginとcend
  const_iteratorを返すbegin()とend()


Shared_ptr atomic access
  shared_ptrの排他アクセス


コード変換
  wstring/stringの変換


std::type_index
  連想配列のキーにtype_infoを使用


IOマニピュレータ
  hexfloatとdefaultfloatを追加


標準コンテナのsize()の計算量を規定
  size()メンバ関数の計算量をO(1)にする


ファイルの位置操作で現代的なファイルサイズを扱えるようにする


next/prev
  イテレータをn個進める/戻す


std::addressof
  operator&がオーバーロードされた型の変数に対してもアドレスを取得できる


std::swapが定義されているヘッダファイルが変更


標準ライブラリのconstexpr対応
  とりあえずデフォルトコンストラクタのみ



あとで消す
noncopyable

演算子のオーバーロード

60進数リテラル