ISO/IEC 14882:2011
読み:アイエスオウ-アイイースィー-いちよんはちはちに-にーゼロいちいち
外語:ISO/IEC 14882:2011
ISO規格による
C++
(
ISO C++
)である
ISO/IEC 14882
の第三版。俗に「
C++11
」と呼ばれる。仕様策定中は「
C++0x
」と呼ばれていた。
目次
概要
特徴
コンセプト
拡張
新予約語
仕様変更の予約語
TR1/Boostとの差
実装
Microsoft Visual C++
GCC
clang/LLVM
概要
元々は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)
新しい文字列直定数に対応
u8/u/Uで、各々
UTF-8
、
UTF-16
、
UTF-32
raw文字列直定数を導入。R"..."で、文字列中では\のエスケープは不要
ユーザー定義直定数
auto
キーワードを「型類推」のためのものに
仕様変更
新予約語
主な新しい予約語は次の通り。
alignof
char16_t
char32_t
constexpr
decltype
nullptr
static_assert
thread_local
仕様変更の予約語
仕様変更
や拡張が予定されている、既存の予約語は次の通り。
auto
(完全な仕様変更)
class
(enum classなどの用途で使われる)
default
(メンバー関数の定義にも使う)
delete
(メンバー関数の定義にも使う)
explicit
(コンストラクターだけでなく、関数も修飾する)
extern
(extern templateとしての用途を追加)
inline
(名前空間の修飾に使う)
mutable
(
ラムダ式
の修飾にも使う)
operator
(
ユーザー定義直定数
の定義に使う)
sizeof
(可変長引数のtemplateの長さを得るために拡張)
using
(templateの別名定義に使う)
TR1/Boostとの差
標準仕様との名前重複を避けるため、Technical Report 1(TR1)は名前空間にstd::tr1、Boostは名前空間にboostを使う。
C++11
は、これらの機能を導入する際、名前空間はstdとする。
実装
Microsoft Visual C++
Visual C++ 2010時点で、C++11の主要機能のうち「ラムダ式」「auto」「
右辺値参照
」「static_assert」「nullptr」「decltype」に対応している。
また、実装は完全ではないが、<unordered_map> <random> <tuple> <regex> などの新しいヘッダーが追加されている。
GCC
GCCでは、GCC 4.3からC++0x/C++11の対応を徐々に開始した。
GCC 4.8.x系列で、ほぼ全機能が実装されているようである。
clang/LLVM
clang/LLVM 2.9で
C++0x
に完全対応し、clang/LLVM 3.3でC++11の全機能に完全対応した。
再検索