C++
 Computer >> コンピューター >  >> プログラミング >> C++

C++98、C++03、C++0x、C++11の違いを徹底解説!各標準規格の特徴と進化の history

C++標準規格の変遷を理解しよう

C++は1998年に最初の国際標準規格が制定されて以来、数年ごとに改訂を重ねながら進化を続けてきました。本記事では、C++98C++03C++0xC++11という各規格の違いと、それぞれがもたらした変更点について詳しく解説します。

C++98:最初の標準規格

C++98は、C++における最初の公式標準規格(ISO/IEC 14882:1998)です。この規格によって、言語の基本的な構文体系、STL(Standard Template Library)、そして標準ライブラリの全体像が初めて定義されました。C++の土台となる重要な規格です。

C++03:バグフィックスが中心の改訂版

C++03は、C++98の次の改訂版(ISO/IEC 14882:2003)として策定されました。この改訂は主に規格の不備を修正するもので、コア言語に関する92件、標準ライブラリに関する125件の欠陥報告(TR:Technical Corrigendum)を修正しました。

新しく追加された言語機能はわずか1つで、それが値初期化(value initialization)です。そのため、C++03は実質的にC++98のマイナーアップデートと捉えられています。

C++0x:完成を待たれた次世代規格の開発コード名

C++0xは、次世代のC++標準規格の策定作業中に使われていた名称です。当初は2008年から2009年頃の完成が見込まれていましたが、策定作業は難航し、最終的に完成したのは2011年でした。末尾の「x」は「10年代のどこかで完成する」という意味が込められており、皮肉にも予想より2年ほど遅れる結果となりました。

C++11:モダンC++の幕開け

C++11は、2011年に正式公開されたモダンC++の標準規格(ISO/IEC 14882:2011)です。従来の言語仕様に対して数多くの大規模な拡張と改善が施され、C++の書き方が大きく変わる転換点となりました。

C++11の主要な新機能

  • 初期化子リスト(Initializer lists)
  • 自動型推論(auto)
  • 右辺値参照とムーブコンストラクタ
  • constexpr:一般化された定数式
  • POD(Plain Old Data)の定義の変更
  • 一様初期化(Uniform initialization)
  • 範囲ベースforループ
  • ラムダ関数とラムダ式
  • 代替関数構文(後置戻り値型)
  • 明示的なオーバーライド指定(override)とfinal
  • 定数nullポインタ(nullptr)
  • 強く型付けされた列挙型(enum class)
  • 適切な箇所での右山括弧(>>)の扱いの改善

さらに、これら以外にも多数の機能が追加されています。C++11の新機能の完全なリストと具体例については、WikipediaのC++11のページを参照してください。

まとめ

C++98が言語の基礎を固め、C++03がその不備を修正し、そしてC++11が「モダンC++」の時代を切り開きました。特にC++11は、ラムダ式や自動型推論、ムーブセマンティクスなど、現代のC++プログラミングに欠かせない機能を数多く導入した画期的な規格です。C++を学ぶ際には、これらの規格の違いを理解しておくことで、コードの背景にある設計思想をより深く把握できるでしょう。

  1. C++標準テンプレートライブラリ(STL)で使える二分探索の基本と使い方

    二分探索(バイナリサーチ)は「対数探索」とも呼ばれる検索アルゴリズムで、ソート済みの配列から特定の要素を効率よく探し出す手法です。配列を再帰的に半分に分割しながら探索範囲を絞り込み、中央の位置に目的の要素が見つかればその位置を返し、見つからなければ分割と照合を繰り返します。探索のたびに候補が半分に減っていくため、計算量はO(log n)と非常に高速です。 二分探索の仕組み このアルゴリズムは、ソート済み配列の中央の要素と、探したい要素を比較することで動作します。 探索対象の要素が中央の要素と等しい場合 → その要素のインデックス(位置)を返します。 探索対象の要素が中央の要素より大きい場合 →

  2. C++ STL(標準テンプレートライブラリ)のプライオリティキュー徹底解説

    プライオリティキュー(優先度付きキュー)は、優先度を持つ要素のコレクションを格納するための抽象データ型(ADT)です。各要素は優先度に基づいて挿入・削除が行われ、最も優先度の高い要素はいつでも取り出すことができます。スタックやキュー、リストなどの線形データ構造とは異なり、プライオリティキューは要素を格納位置の順序ではなく、優先度に基づいて管理する点が大きな特徴です。C++では、STLの <queue> ヘッダで提供されており、デフォルトでは最大値が先頭に来る構造になっています。プライオリティキューがサポートする主な操作size() — プライオリティキュー内の要素数を返し、サイズを