ISO規格によるC++(ISO C++)であるISO/IEC 14882の第三版。俗に「C++11」と呼ばれる。仕様策定中は「C++0x」と呼ばれていた。
元々は2009(平成21)年までに標準化することを目標としていたため0xとした。しかし策定作業は紛糾・難航し、2009(平成21)年には間に合わなかった。それでも、仮称はそのまま維持された。
C++0xでは、Technical Report 1やBoost C++ライブラリに含まれている機能の導入が議論されていた。
- C++98と、更に可能な限りCとも互換性を保持する
- 型は、従来の危険な技術に換えて、新しい安全なものが提供される
- ハードウェアの直接操作に関する機能の拡充
- マルチスレッド
- ジェネリックプログラミング
- パフォーマンス向上と実戦向けの適切なソリューション提供
- コア言語仕様の拡張のほかに、標準ライブラリの拡張にも重点が置かれている
主な拡張は次の通り(順不同)。
- 新参照型「右辺値参照」(rvalue references)の追加。「型名 &&」として使う。
- 関数や式などを定数として宣言するキーワードconstexprの追加
- ラムダ関数およびラムダ式
- ナルポインターを表わすキーワードnullptrの追加
- long long int型の追加
- 範囲コンセプトで、範囲指定ループが可能。例えば配列を自動的に全部参照するループが作れる
- 外部テンプレートの宣言「extern template」を拡張
- スコープ付きの強く型付けされた列挙型「enum class」(enum structも同義)を拡張
- templateが、可変長引数に対応
- Unicode文字を表現する'\u'の追加 (例: \u4e00)
- 新しい文字列直定数に対応
- ユーザー定義直定数
- autoキーワードを「型類推」のためのものに仕様変更
主な新しい予約語は次の通り。
仕様変更や拡張が予定されている、既存の予約語は次の通り。
標準仕様との名前重複を避けるため、Technical Report 1(TR1)は名前空間にstd::tr1、Boostは名前空間にboostを使う。
C++11は、これらの機能を導入する際、名前空間はstdとする。
Visual C++ 2010時点で、C++11の主要機能のうち「ラムダ式」「auto」「右辺値参照」「static_assert」「nullptr」「decltype」に対応している。
また、実装は完全ではないが、<unordered_map> <random> <tuple> <regex> などの新しいヘッダーが追加されている。
GCCでは、GCC 4.3からC++0x/C++11の対応を徐々に開始した。
GCC 4.8.x系列で、ほぼ全機能が実装されているようである。
clang/LLVM 2.9でC++0xに完全対応し、clang/LLVM 3.3でC++11の全機能に完全対応した。
用語の所属

プログラミング言語

C++

ISO/IEC 14882
関連する用語

標準C++ライブラリ