C++ 1xについて

C++ Advent Calendar jp 2010の24日目の記事です.世の中ではC++ 0xが旬のようですが,そんな古いのは置いておいてC++ 1xの話をしましょう.C++ 1xはついに破壊的変更が来ます.

include to import

includeは単なる置換でコンパイルが遅い原因にもなっていました.C++ 1xからはシンボルをインポートするだけのimportが追加され,またコンパイル処理の明確な分離によって,爆速コンパイルになっています.

struct / classの最後の;の削除

struct S
{
    // ...
}   // ;がいらない!

これに苦しめられた人は結構いるのではないでしょうか!

Angel Bracketの削除

C++ 0xで>>が出来るようになったとはいえ,やっぱりこの辺はコンパイラに優しくないわけです.なので,C++ 1xでは!()を使ってテンプレートパラメータを指定するようにします.

vector!(string) v;

auto

C++ 0xでautoが入ったものの,constとかと合わせるときはconst autoとかになって冗長でした.C++ 1xでは

const v = 10; // v is int

とより書きやすくなってます.

配列,連想配列,foreach

この辺ってよく使われるんだから,組み込んだ方がいいよね,ということで組み込まれてます.後Range-based for文はRangeサポートも考慮にいれてforeachに名前が変わりました.

foreach (v : [1, 2, 3]) {
    // do something
}

型推論も効いて使いやすいですね.

static *

static ifやstatic assert(C++ 0xではstatic_assert)などコンパイルタイムに色々やる人が増えたので,組み込みで使いやすくなりました.

alias

typedefがあまり使い勝手がよくないので,template周りでより柔軟に使えるaliasが入りました.template parameterでも使うことができて,parameterに様々なシンボルを受け取れるようになります.

constexpr

C++ 1xでは,コンパイル時に値が決まるものを利用した関数はそもそもコンパイル時に評価されるため,これは廃止されました.

thread_local

C++ 1xではデフォルトで変数はTLSに保存されます.なので,thread_localの変わりにsharedという共有変数を表すキーワードが追加されました.

まとめ

その他にもここにあるような機能はちゃんとサポートされています.で,肝心の処理系はこのページからダウンロードできます.あ,言い忘れましたがC++ 1xは別名D言語と呼ばれているので,C++ 1xが面倒な人はD言語と読んだ方が呼びやすいかもしれません.

Enjoy C++ 1x!