サーチ…
前書き
1998年には、C ++を内部標準言語にする標準の最初の出版物がありました。その時から、C ++はC ++の異なる方言に発展しました。このページでは、以前のバージョンと比較して、すべての異なる標準の概要とその変更を見つけることができます。これらの機能の使い方の詳細は、より特殊なページで説明しています。
備考
C ++について言及すると、しばしば「標準」が参照されます。しかし、その基準は何ですか?
C ++には長い歴史があります。 Bell Labs内のBjarne Stroustrupによる小規模なプロジェクトとして開始され、90年代初めにはかなり普及しました。複数の企業がC ++コンパイラを作成していたため、ユーザは幅広いコンピュータでC ++コンパイラを実行することができました。しかし、これを容易にするために、これらの競合するすべてのコンパイラは、言語の単一の定義を共有する必要があります。
その時点で、C言語は正常に標準化されました。これは、言語の正式な記述が書かれたことを意味します。これは米国規格協会(ANSI)に提出され、審査のために文書を開き、その後1989年に出版した。1年後、国際標準化機構(異なる言語で異なる頭字語を使用するため、 、ISO、ギリシャ語のisosから派生した、等しいことを意味する。)は、国際標準として米国規格を採択した。
C ++では、当初から国際的に関心があったことは明らかでした。 ISO内のワークグループが開始されました(WG21と呼ばれ、SubCommittee 22内にあります)。このワークグループは、1995年頃に最初の標準を策定しました。しかし、私たちプログラマーが知っているように、計画されたデリバリーには最後の機能よりも危険は何もなく、C ++にも起こりました。 1995年に、STLという名前のクールな新しいライブラリが登場しました.WG21で働く人々は、C ++ドラフト標準にスリム化バージョンを追加することに決めました。当然ながら、これにより納期が逃したばかりで、3年後には最終的に文書が完成しました。 ISOは非常に正式な組織であるため、C ++標準にはあまり有名でないISO / IEC 14882の名前が付けられました。標準が更新されるにつれて、この正確なバージョンは14882:1998として知られていました。
実際、スタンダードを更新するという要求がありました。この標準は、C ++コンパイラの動作方法を正確に記述することを目的とした非常に厚いドキュメントです。わずかなあいまいさでも修正する価値があるので、2003年までに14882:2003としてアップデートがリリースされました。しかし、これはC ++に何の機能も追加しませんでした。新機能は2回目の更新予定です。
この2回目のアップデートは、C ++ 0xとして知られていました。なぜなら、2008年か2009年かが分かっていなかったからです。そのバージョンにも若干の遅延があり、14882:2011になりました。
幸いにも、WG21はそれを再び起こらせないことに決めました。 C ++ 11は好評を得て、C ++に新たな関心を寄せました。だから、勢いを維持するために、3回目の更新は計画から出版まで3年間で14882:2014になりました。
仕事はそこでも終わらなかった。 C ++ 17標準が提案され、C ++ 20の作業が開始されました。
現在の作業草案
公開されているすべてのISO規格は、ISO店( http://www.iso.org )から販売されています 。 C ++標準の作業草案は公然と無料で利用可能です。
異なるバージョンの標準:
- 今後の予定(C ++ 20またはC ++ 2aと呼ばれることもある): 現在の作業用下書き ( HTML版 )
- 提案(C ++ 17またはC ++ 1zとも呼ばれる): 2017年3月のN4659作業草案 。
- C ++ 14(時にはC ++ 1yと呼ばれる): 2014年11月、N4296作業草案
- C ++ 11(時にはC ++ 0xとも呼ばれる): 2011年2月の作業用ドラフトN3242
- C ++ 03
- C ++ 98
C ++ 11
C ++ 11標準は、C ++標準の主な拡張です。以下は、isocppに関するグループ化された変更の概要と、より詳細なドキュメントへのリンクです。
言語拡張
一般的な機能
- オート
- 宣言型
- レンジ・フォー・ステートメント
- 初期設定リスト
- 一様初期化構文とセマンティクス
- Rvalue参照と移動セマンティクス
- ラムダ
- 例外を伝播させないためのnoexcept
- constexpr
- nullptr - ヌルポインタリテラル
- 例外のコピーと再利用
- インラインネームスペース
- ユーザー定義リテラル
クラス
- =デフォルトと=削除
- デフォルトの移動とコピーの制御
- コンストラクタの委譲
- クラス内メンバ初期化子
- 継承されたコンストラクタ
- オーバーライドコントロール:オーバーライド
- オーバーライドコントロール:final
- 明示的変換演算子
その他のタイプ
- enumクラス
- long long - より長い整数
- 拡張整数型
- 一般化された組合
- 一般化されたPOD
テンプレート
- Externテンプレート
- テンプレートエイリアス
- バリデリックテンプレート
- テンプレート引数としてのローカル型
並行性
- 並行処理メモリモデル
- 並行処理による動的初期化と破壊
- スレッドローカルストレージ
その他の言語機能
- C ++ 11の__cplusplusの値は何ですか?
- 接尾辞の戻り型の構文
- 絞込み防止
- 直角括弧
- static_assertコンパイル時アサーション
- 生の文字列リテラル
- 属性
- アラインメント
- C99の機能
ライブラリ拡張
一般
- unique_ptr
- shared_ptr
- weak_ptr
- ガベージコレクションABI
- タプル
- タイプ特性
- 関数とバインド
- 正規表現
- タイムユーティリティ
- 乱数生成
- スコープ付きアロケータ
コンテナとアルゴリズム
- アルゴリズムの改善
- コンテナの改善
- unordered_ *コンテナ
- std :: array
- forward_list
並行性
C ++ 14
C ++ 14標準は、しばしばC ++ 11のバグ修正と呼ばれます。これには、C ++ 11の新機能の拡張機能が最も多く含まれている変更点のリストのみが含まれています。以下は、isocppに関するグループ化された変更の概要と、より詳細なドキュメントへのリンクです。
言語拡張
- バイナリリテラル
- 一般化された戻り型の控除
- decltype(自動)
- 一般化されたラムダキャプチャ
- 一般的なラムダ
- 変数テンプレート
- 拡張
constexpr
-
[[deprecated]]
属性 - 桁区切り記号
ライブラリ拡張
- 共有ロック
-
std::
typesのユーザー定義リテラル -
std::make_unique
- 型変換
_t
エイリアス - タイプによってタプルを扱う (例:
get<string>(t)
) - 透明な演算子のFunctor (例:
greater<>(x)
) -
std::quoted
廃止予定/削除済み
-
std::gets
はC ++ 11では廃止され、C ++ 14では削除されました。 -
std::random_shuffle
は推奨されていません
C ++ 17
C ++ 17標準は機能が完備されており、標準化のために提案されています。これらの機能を実験的にサポートしているコンパイラでは、通常C ++ 1zと呼ばれます。
言語拡張
- 式の折り畳み
-
auto
非型テンプレート引数を宣言する - 保証されたコピーエリシジョン
- コンストラクタのテンプレートパラメータ控除
- 構造化バインディング
- コンパクトなネストされた名前空間
- 新しい属性:
[[fallthrough]]
[[nodiscard]]
、[[nodiscard]]
、[[maybe_unused]]
-
static_assert
デフォルトメッセージ -
if
とswitch
初期化子 - インライン変数
-
if constexpr
- 表現評価保証の順序
- オーバーライドされたデータの動的メモリ割り当て
ライブラリ拡張
-
std::optional
-
std::variant
-
std::string_view
- 連想コンテナのための
merge()
とextract()
-
<filesystem>
ヘッダを持つファイルシステムライブラリ 。 - ほとんどの標準アルゴリズムのパラレルバージョン (
<algorithm>
ヘッダー内 )。 -
<cmath>
ヘッダ に数学的特殊関数を追加する 。 - マップ<>、unordered_map <>、set <>、およびunordered_set <>の間でノードを移動する
C ++ 03
C ++ 03標準は、主にC ++ 98標準の欠陥報告に対処します。これらの欠陥とは別に、新しい機能が1つ追加されます。
言語拡張
C ++ 98
C ++ 98は、C ++の最初の標準化されたバージョンです。 Cの拡張として開発されたので、C ++からCを分離する多くの機能が追加されています。
言語拡張(C89 / C90に関して)
- クラス、派生クラス、仮想メンバ関数、定数メンバ関数
- 関数のオーバーロード、演算子のオーバーロード
- 1行コメント(C言語でC99標準で導入されています)
- 参考文献
- 新規作成と削除
- ブール型(C言語でC99標準で導入されています)
- テンプレート
- 名前空間
- 例外
- 特定のキャスト
ライブラリ拡張
- 標準テンプレートライブラリ
C ++ 20
C ++ 20は、現在開発中のC ++ 17の標準であるC ++の今後の標準です。進歩は公式のISO cppウェブサイトで追跡することができます。
次の機能は、C ++標準の次期リリースで受け入れられたもので、2020年を対象としています。
言語拡張
現在、言語拡張は受け入れられていません。
ライブラリ拡張
ライブラリ拡張は現在受け入れられていません。