2007-10-22
■[C++][まとめ] C++0xの言語拡張まとめ(※随時更新)
テンプレートの連続した山カッコの問題の解決
ユーザー定義のクラスで配列のような初期化構文を実装可能になる
コンストラクタの構文と初期化子リストの構文が一様になる
コンストラクタから他のコンストラクタを呼び出せる
・auto
型推論
autoキーワードの意味が変更になるため、下位互換がなくなる
sizeofの型版
テンプレートを使用して型の別名を付けることができる。いわゆるtemplate typedef
構造体/クラスのメンバをインスタンス化せずにsizeofすることが可能になる
ヌルポインタを表すキーワード追加
・char16_t, char_32_t, raw string literal, UTF-8リテラル, 文字列リテラル中のユニバーサルキャラクタ名
文字列関係。UTF-8/16/32, エスケープシーケンス無視
・右辺値参照・ムーブセマンティクス(std::move, std::forward)
一時オブジェクトのコストをなくし(減らし)、完璧な転送を実現する
オブジェクトが左辺値の場合のみ呼べるメンバ関数、右辺値の場合のみ呼べる関数
・コンセプト(late_check, Axiom)
テンプレートのエラーメッセージを改善し、テンプレートの多くの手法を言語で総括的にサポートする
コンテナ, 配列をループするための新たなfor文
コンパイル時アサート
定数式
・ラムダ式
匿名関数オブジェクトを生成するための式
・Variadic Templates, Variadic Template Template Parameters
可変引数テンプレート
スコープと強力な型付けを持ったenum
メンバ変数の新たな初期化
・Defaulted and Deleted Functions
コンパイラが自動的に生成する関数の制御
明示的な型変換
"conversion to unspecified bool"というイディオムを言語でサポート
・Default template arguments for function templates
関数テンプレートのデフォルトテンプレート引数
戻り値の型を後置する関数宣言構文
派生クラスで基本クラスのコンストラクタを使用できる
サフィックスを自作することができる。例えば2進数リテラル
潜在的なテンプレートのインスタンス化を抑制
透過的な名前空間
テンプレートパラメータとtypedef名をfriendにすることができる
アライメントの指定と取得
共用体(union)でクラスオブジェクトを持てる
スレッドローカル記憶域
関数内で作成したクラスのオブジェクトをvectorに保持したりできる
POD型の定義を見直し
今まであいまいだったSFINAEの仕様を明確化
コンパイラごとに存在する属性構文(__declspec, __attribute__, etc...)を一般化
posix名前空間を予約
デフォルトコンストラクタ、(以下略)が暗黙に定義されるとエラーになるクラスでは、delete扱いにする
・ガベージコレクションと到達可能性ベースリーク検知の最小支援
GCの最低限の決めごと
long long intとか可変引数マクロとか
テンプレートの再帰数とか
ライブラリ
主にBoostから移植されるライブラリ群(スマートポインタ, 乱数生成器, 正規表現...)
・unordered_map / unordered_set
ハッシュ表
日付/時間ライブラリ
スレッドライブラリ
単方向リスト
追加されるSTLアルゴリズム
コンテナに要素を追加する際、コピーのコストをなくす
OS固有のエラー情報を取得する
system_errorを使用したエラー通知の設計
コンテナ内のコンテナの各要素にアロケータを指定できる
コンパイル時条件によるオーバーロード
basic_stringと数値の相互変換(to_string, stoi, etc...)
initializer_listによるmin/max/minmax関数
デフォルトの乱数生成器型
範囲がソート済みか判定するアルゴリズム
・vector::data, shrink_to_fit
std::vectorに追加されるメンバ関数
map::operator[] constの代わり
const_iteratorを返すbegin()とend()
shared_ptrの排他アクセス
wstring/stringの変換
連想配列のキーにtype_infoを使用
hexfloatとdefaultfloatを追加
size()メンバ関数の計算量をO(1)にする
・ファイルの位置操作で現代的なファイルサイズを扱えるようにする
イテレータをn個進める/戻す
operator&がオーバーロードされた型の変数に対してもアドレスを取得できる
とりあえずデフォルトコンストラクタのみ
あとで消す