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



シャノンシャノン 2008/05/13 12:11 まとめて読みましたが、C# の機能が結構取り込まれてる印象ですね。
拡張for、初期化子リスト(C# 3.0から)、デリゲーティングコンストラクタ、auto、Template Aliases、nullptr、コンセプト(ちょっと違う)、ラムダ式、Strongly Typed Enums、メンバ初期化子、Angle bracket、explicit conversion、raw string literal
あたりが、C++ より C# の方が先に実装してますね。
もちろん、その概念の元祖が C# 発祥だと言うつもりはありませんが。

faith_and_bravefaith_and_brave 2008/05/13 14:43 どもども。
たしかに C++0x の機能は「なんで今までできなかったの!?」というものやシンタックスシュガーが多いですね
コンセプトが C# に入ったら強力だろうな〜

シャノンシャノン 2008/05/13 15:58 VB2008に入らなかった動的インターフェイスが欲しいですね。
コンセプトマップはないですけど。型として静的にそのインターフェイスを実装していなくとも、そのインターフェイスと同じメソッドシグネチャを持っていれば、dynamic_cast が成功するようなイメージ。
コンパイル時型チェックは効かないけど、インテリセンスは効くステキ機能でした。

Default & Deleted Function は、別になくても困らないけど、意図を明確化するためのものでしょうかね。
Deleted Function を呼ぼうとした時に「リンクエラー」よりは親切なエラーメッセージが出せるでしょうし。
あわせて純粋仮想関数を = pure とかにするつもりはないのかな。

faith_and_bravefaith_and_brave 2008/05/19 11:51 コメント見逃してました><

> 動的インターフェイス
ダックタイピングですな。
Scalaみたいに関数ごとに 「T はxxを持ってればいい」と書ければさらにステキですね(あっちは静的ですし)

> Default & Deleted Function
インライン化の制御とか、コピー禁止のためにコピーコンストラクタと代入演算子をprivateに隠す手間は省けますね。

> 純粋仮想関数を = pure
きっと、予約語を積極的に増やす気がないw

一通り読んでの感想一通り読んでの感想 2008/11/14 23:52 「言語拡張てw、俺C++を半分も使いこなせてねぇよ……λ」

faith_and_bravefaith_and_brave 2008/11/15 01:32 便利そうな機能をつまみぐいでもいいと思いますよ(^^
Range-base for文とか右辺値参照とかラムダ式とか。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/faith_and_brave/20071022/1193052163