Hatena::ブログ(Diary)

Faith and Brave - C++で遊ぼう このページをアンテナに追加 RSSフィード Twitter

2007-10-22

[][] 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進数リテラル