名前空間
変種
操作

C++ の歴史

提供: cppreference.com
< cpp‎ | language
 
 
C++言語
一般的なトピック
フロー制御
条件付き実行文
繰り返し文 (ループ)
ジャンプ文
関数
関数宣言
ラムダ関数宣言
inline 指定子
例外指定 (非推奨)
noexcept 指定子 (C++11)
例外
名前空間
指定子
decltype (C++11)
auto (C++11)
alignas (C++11)
記憶域期間指定子
初期化
代替表現
リテラル
ブーリアン - 整数 - 浮動小数点
文字 - 文字列 - nullptr (C++11)
ユーザ定義 (C++11)
ユーティリティ
属性 (C++11)
typedef 宣言
型エイリアス宣言 (C++11)
キャスト
暗黙の変換 - 明示的な変換
static_cast - dynamic_cast
const_cast - reinterpret_cast
メモリ確保
クラス
クラス固有の関数特性
特別なメンバ関数
テンプレート
その他
C++ の歴史
 

目次

[編集] 初期の C++

  • 1979年 最初の C with Classes が実装される。
  1. 新しい機能: クラスメンバ関数派生クラス、分割コンパイル、public および private アクセス制御friend、関数引数の型チェック、デフォルト引数インライン関数代入演算子のオーバーロードコンストラクタデストラクタ、f(void) と同じ f()、呼び出し関数および戻り関数 (C++ にはない同期機能)。
  2. ライブラリ: 平行処理ライブラリ (C++ にはない)。
  • 1982年 C with Classes のリファレンスマニュアルが発行される。
  • 1984年 C84 が実装され、リファレンスマニュアルが発行される。
  • 1985年 Cfront 1.0
  1. 新しい機能: 仮想関数、関数および演算子のオーバーロード参照new および delete 演算子、const キーワード、スコープ解決演算子。
  2. ライブラリの追加: complexstringiostream
  • 1985年 プログラミング言語 C++ 第1版
  • 1986年 多重継承、例外処理、テンプレートなどの残されている設計目標を記述した "whatis?" 文書。
  • 1987年 GCC 1.15.3 の C++ サポート。
  • 1989年 Cfront 2.0
  1. 新しい機能: 多重継承メンバへのポインタprotected アクセス、型安全なリンケージ、抽象クラスstatic および const メンバ関数、クラス固有の new および delete
  2. ライブラリの追加: 入出力マニピュレータ
  • 1990年 注解 C++ リファレンスマニュアル

この本は、まだ実装されていないいくつかの機能を含めて、設計の観点から言語を説明しました。 ISO までの事実上の標準としての役割を果たしました。

  1. 新しい機能: 名前空間例外処理ネストしたクラステンプレート
  • 1991年 Cfront 3.0
  • 1991年 プログラミング言語 C++ 第2版

[編集] 標準 C++

  • 1990年 ANSI C++ 委員会が設立される。
  • 1991年 ISO C++ 委員会が設立される。
  • 1992年 C++ で STL が実装される。
  • 1998年 C++98 (ISO/IEC 14882:1998)
  1. 新しい機能: RTTI (dynamic_casttypeid)、共変戻り値型キャスト演算子mutablebool、条件式内の宣言、テンプレートの実体化メンバテンプレート、export。
  2. ライブラリの追加: コンテナアルゴリズムイテレータ関数オブジェクト (STL に基づく)、ロケールbitsetvalarrayauto_ptrテンプレート化された stringiostream および complex
  • 1998年 プログラミング言語 C++ 第3版
  • 1999年 標準のための新しい高品質なライブラリの候補を生み出すために、委員会のメンバによって boost が設立される。
  • 2003年 C++03 (ISO/IEC 14882:2003)

これは、正誤票より少し多くのことが意図された、マイナーな改訂でした。

  1. 新しい機能: 値初期化
C++03 で修正された欠陥報告 (コア92個、ライブラリ125個)

この TR は様々な C++ の抽象化のコストを議論し、実装のガイダンスを提供し、組込みシステムにおける C++ の使用を議論し、 C の ISO/IEC TR 18037:2008 <iohw.h> に対するインタフェース <hardware> を導入しました。

この TR は、 C++ 標準ライブラリに以下のものを追加する、 C++ ライブラリの拡張です。

  1. boost から: 参照ラッパースマートポインタメンバ関数アダプタresult_ofバインダ関数オブジェクトラッパー型特性乱数、数学の特殊関数、タプル配列ラッパー非順序コンテナ (ハッシュを含む)、正規表現
  2. C99 から: C99 で新たに追加された <math.h> の数学関数、ブランク文字分類浮動小数点環境16進浮動小数点入出力マニピュレータ固定サイズの整数型long long 型va_copysnprintf() および vfscanf() ファミリーの関数、printf() および scanf() ファミリーの関数のための C99 の変換指定子。

特殊関数を除く TR1 のすべてのものは、若干の変更を加えて、 C++11 に含まれました。

この国際標準は、 TR1 の一部であったけれども C++11 に含まれなかった特殊関数 (楕円積分、指数積分、ラゲール多項式、ルジャンドル多項式、エルミート多項式、ベッセル関数、ノイマン関数、ベータ関数、リーマンゼータ関数) を追加する、 C++11 標準ライブラリの拡張です。 この標準は C++17 にマージされました。

C++ プログラマが利用可能な抽象化の向上と既存の慣習の標準化の両方のために、多数の変更が導入されました。

  1. 新しい言語機能: auto および decltype、デフォルト化された関数と削除された関数、final および override戻り値型の後置右辺値参照ムーブ構築/ムーブ代入スコープ付き列挙型constexpr およびリテラル型リスト初期化委譲および継承コンストラクタ、波括弧または等号初期化子、nullptrlong longchar16_t および char32_t型エイリアス可変長引数テンプレート一般化された共用体一般化された PODUnicode 文字列リテラルユーザ定義リテラル属性ラムダ式noexceptalignof および alignas、マルチスレッド化されたメモリモデル、スレッドローカルストレージGC インタフェース範囲 for (boost ライブラリに基づく)、static assert (boost ライブラリに基づく)。
  2. 新しいライブラリ機能: アトミック操作ライブラリ、emplace() およびその他の既存のライブラリのすべての部分に渡る右辺値参照の使用、std::initializer_list、状態付きおよびスコープ付きのアロケータ、forward_listchrono ライブラリratio ライブラリ、新しいアルゴリズム、Unicode 変換ファセット
  3. TR1 から: 特殊関数を除く TR1 のすべて。
  4. boost から: スレッドライブラリexception_ptrerror_code および error_condition、イテレータの改善 (std::beginstd::endstd::nextstd::prev)。
  5. C から: C スタイルの Unicode 変換関数。
C++11 で修正された欠陥報告 (コア741個、ライブラリ685個)

この TR は浮動小数点算術に対する IEEE 754-2008 標準の10進浮動小数点型 std::decimal::decimal32、std::decimal::decimal64、std::decimal::decimal128 を実装します。

C++ 標準のマイナーな改訂。

  1. 新しい言語機能: 可変長引数テンプレート多相ラムダ、ラムダキャプチャ式、new/delete の省略、constexpr 関数の制限の緩和2進リテラル、桁区切り文字、関数の戻り値型の推定、波括弧または等号初期化子によるクラスに対する集成体初期化
  2. 新しいライブラリ機能: std::make_uniquestd::shared_timed_mutex および std::shared_lockstd::integer_sequencestd::exchangestd::quoted、および、いくつかのアルゴリズムに対する範囲を2つ取るオーバーロードや、型特性の型エイリアスバージョン、ユーザ定義文字列、duration、複素数リテラルなどの既存のライブラリ機能に対する多数の小さな改善。
C++14 で修正された欠陥報告 (コア276個、ライブラリ149個)
  • 2015年 ファイルシステムライブラリ TS (ISO/IEC TS 18822:2015) (ISO Store) (2014 draft)

この TS は boost.filesystem V3 (にいくつかの変更と拡張を加えたもの) をベースとしたファイルシステムライブラリを規定する実験的な C++ ライブラリの拡張です。 この TS は C++17 にマージされました。

この TS はすべての標準ライブラリのアルゴリズムに対する並列化およびベクトル化 API を標準化し、reducetransform_reduceexclusive_scan といった新しいアルゴリズムを追加します。 この TS は C++17 にマージされました。

  • 2015年 トランザクショナルメモリのための拡張 TS (ISO/IEC TS 19841:2015) (ISO Store) (2015 draft)

この TS はトランザクショナルメモリの意味論を実装する同期化ブロック、アトミックブロックおよびトランザクションセーフな関数で C++ のコア言語を拡張します。

  • 2015年 ライブラリの基礎のための拡張 TS (ISO/IEC TS 19568:2015) (ISO Store) (2015 draft)

この TS はいくつかの新しいコンポーネント (optionalanystring_viewsamplesearchapply多相アロケータおよび型特性に対する変数テンプレート) を C++ 標準ライブラリに追加します。 この TS は C++17 にマージされました。

この TS は、メタプログラミングを補助し、テンプレート実体化の診断を単純化する、コンセプト (名前付きの型要件) および制約 (テンプレート、関数および変数の宣言において使用できる型の制限) で C++ のコア言語を拡張します。 コンセプトを参照してください。 この TS は、一部を切り捨てて、 C++20 にマージされました。

この TS は std::future に対するいくつかの拡張、ラッチおよびバリア、およびアトミックなスマートポインタを含めるために C++ ライブラリを拡張します。

  1. 言語の変更: 畳み込み式クラステンプレートの実引数推定、auto 非型テンプレート引数、コンパイル時 if constexprインライン変数構造化束縛if および switch に対する初期化子、u8 文字、単純化されたネストした名前空間、複数の名前を宣言できる using 宣言、型システムの一部となった noexcept評価順序の新しいルール、明示的なアライメント付きの確保関数、保証されたコピー省略__has_include*this のラムダキャプチャconstexpr ラムダ、繰り返す必要のない属性名前空間、新しい属性 [[fallthrough]], [[nodiscard]], [[maybe_unused]]。 削除されたトライグラフregister キーワード、bool を取るインクリメント
  2. ライブラリの変更: std::variantstd::launder、未初期化メモリ用のツール (std::destroy_at/std::destroy/std::destroy_n, std::uninitialized_move, std::uninitialized_value_construct など)、 map/set の extract および mergebytestd::make_from_tuplestd::to_chars/from_chars、ファイルシステムにおける相対パスのサポート (proximate, relative, weakly_canonical)、ファイルシステムにおけるディレクトリエントリのキャッシュ、隣接イテレータ、非メンバの size/empty/data、map/unordered_map の try_emplace および insert_or_assignuncaught_exceptionslock_guard の可変長引数版、as_constconjunction/disjunction/negation型特性変数 xxx_v、透過的な owner_lessduration および time_point に対する丸め関数、std::shared_ptr に対する配列サポート、not_fnweak_from_thisis_always_lock_freeis_swappableclamp3D hypotキャッシュラインインタフェースis_invocableis_aggregatehas_unique_object_representations。 非推奨化された std::iteratorstd::raw_storage_iteratorstd::get_temporary_bufferstd::is_literal_typestd::result_of<codecvt>。 削除された auto_ptr非推奨の関数オブジェクトstd::random_shufflestd::unexpected非推奨の iostream のエイリアス
  3. TS から: ファイルシステムライブラリ、ライブラリ基礎バージョン1 (optionalanystring_view多相アロケータ検索子apply など)、並列処理バージョン1 (実行ポリシーreduceinclusive_scanexclusive_scan など)、しかし exception_list は削除されました。 特殊数学 IS から: 特殊な数学関数。 ライブラリ基礎バージョン2から: std::gcdstd::lcm
  4. C11 から: std::aligned_allocstd::timespec_get
C++17 で修正された欠陥報告 (コアTODO個、ライブラリ281個)

この TS は範囲 (新しい、よりパワフルな、イテレータのペアを置き換える抽象化) および範囲ビュー、番兵範囲、オンザフライ変換のための投影、新しいイテレータアダプタおよびアルゴリズムを含めるために、 C++ ライブラリを拡張します。 この拡張は最終的に sort(v); でベクタをソートできるようにします。

この TS はスタックレスコルーチン (再開可能な関数) を含めるために C++ のコア言語と標準ライブラリを拡張します。 キーワード co_awaitco_yield および co_return を追加します。

  • 2018年 ネットワーク処理のための拡張 TS (ISO/IEC TS 19216:2018) (ISO Store) (2017 draft)

この TS は boost.asio をベースとした TCP/IP ネットワーク処理を含めるために C++ ライブラリを拡張します。

この TS はモジュールを含めるために C++ コア言語を拡張します。 キーワード moduleimport が追加され、キーワード export が新しい意味で再導入されます。

[編集] 今後の動向

C++ 標準の次のメジャーな改訂。

  1. 言語の変更: コンセプト三方比較演算子 <=>指示付き初期化子、範囲 for における初期化文および初期化子、[[no_unique_address]][[likely]][[unlikely]]、ラムダキャプチャにおけるパック展開、多くの文脈における型の曖昧性除去のための typename の使用の要求の削除、[[expects: ...]][[ensures: ...]][[assert: ...]]
  2. ライブラリの変更: カレンダーおよびタイムゾーンライブラリ、std::spanstd::endian、make_shared の配列サポート、std::remove_cvrefstd::to_address、浮動小数点および shared_ptr のアトミック、<version>std::osyncstream、<algorithm> <utility> <complex> に対する constexpr、std::string(_view)::starts_with および ends_with。

[編集] 関連項目

[編集] 外部リンク