読者です 読者をやめる 読者になる 読者になる

C++0x の概要

C++

C++0x とは、 C++ の次のバージョンの仮名称です。(現在の C++ のバージョンは C++03 )

0x というのは 200x 年の意味で、 C++09 を目指しています。


C++0x の特徴としては、プログラミングをより簡単にするための構文の追加や
既存機能の強化といったものがあります。


また、言語拡張に合わせて標準ライブラリも強化されます。


たとえば、今まで C++03 で書いていた以下のコードは

#include <iostream>
#include <vector>

using namespace std;

int main()
{
    vector<int> v;

    v.push_back(3);
    v.push_back(1);
    v.push_back(4);

    for (vector<int>::iterator it = v.begin(), last = v.end(); it != last; ++it) {
        cout << *it << endl;
    }

    return 0;
}


C++0x では以下のように簡単に書けるようになります

#include <iostream>
#include <vector>

using namespace std;

int main()
{
    vector<int> v = {3, 1, 4};

    for (int item : v) {
        cout << item << endl;
    }

    return 0;
}


ここで使われているのは以下の 2 つの言語拡張です

初期化子リスト(ユーザー定義クラスでも配列風の初期化を書けるようにする)
Range-base for 文(コンテナ・配列をループするための for 文)



C++0x にはほかにも、コンセプト右辺値参照可変引数テンプレート型推論ラムダ式
といった多数の言語拡張が行われる予定です



ちなみに C++03 でも、 Boost C++ Libraries を使用することによって以下のように書くことができます

#include <iostream>
#include <vector>
#include <boost/assign/std/vector.hpp>
#include <boost/foreach.hpp>

using namespace std;
using namespace boost::assign;

int main()
{
    vector<int> v;

    v += 3, 1, 4;

    BOOST_FOREACH (int item, v) {
        cout << item << endl;
    }

    return 0;
}

C++0x は、 GCC ではすでに一部の機能が実装されています。

C++0x Language Support in GCC


Visual C++ も次のバージョン(10.0) で C++0x に対応する予定のようです。
(すべての機能を実装するのは難しいかもしれないそうです)



C++0x の言語拡張については以下のエントリにまとめてあります

C++0xの言語拡張まとめ



C++0x の言語仕様はこちらで読むことができます

C++ Standards Committee Papers