1983年に AT&Tベル研究所の Bjarne Stroustrup によって開発された、プログラミング言語の種類の1つです。
元々、C言語にクラスの機能を追加した C with Classes というプログラミング言語の開発から始まったもので、その後、C言語の「C」に、インクリメントを意味する「++」を加えた C++(シープラスプラス)の名称が与えられました。C言語との完全な後方互換性を維持してはいませんが、C言語で記述したプログラムがある程度は C++ としてそのまま使えることがあります。
C言語が基になっているため、手続き型プログラミングに対応していることに加えて、クラスなどのオブジェクト指向プログラミングに必要な機能をもっています。また、テンプレートと呼ばれる機能を使用して、型に依存しない汎用的なコードを記述するジェネリックプログラミングや、ラムダ式や関数オブジェクトを用いた関数型プログラミングにも対応しています。よく、「C言語にオブジェクト指向プログラミングの機能を追加した言語」のように紹介されますが、実際にはこのように、複数のプログラミングパラダイムを組み合わせたマルチパラダイムプログラミング言語となっています。
C++ の長所は、C言語と同様に実行速度に優れたコードを生成できることや、ハードウェアを直接的に制御するのに適した機能を備えていることが挙げられます。C言語と比べると、オブジェクト指向プログラミングをサポートしていることで、ソースコードの再利用性や拡張性を高められることや、STL(Standard Template Library)を始めとする標準ライブラリが充実していることが新たな長所となっています。こうしたことから、ゲーム開発、グラフィックスプログラミング、リアルタイムシステムなど、規模が大きめで、かつ高いパフォーマンスが要求される分野でよく利用されています。
一方で弱点として、機能が多く複雑であるために、言語の全体像を把握するのが難しく、学習のハードルが非常に高いことが挙げられます。また、RAII(Resource Acquisition Is Initialization)と呼ばれるテクニックを応用したスマートポインタの仕組みがあることなどによって、C言語よりは改善されているものの、メモリ管理の難しさは相変わらず弱点とされます。また、ビルド時間が長くなりやすい点も問題とされることがあります(特にテンプレート機能を多用する場合)。こうした点から、C言語以上にプログラマーの力量が求められる傾向があります。
特にメモリ安全性への懸念から、より安全性の高いプログラミング言語に移行する動きもあります。移行先の言語としてよく名前が挙がる Rust や Go といった言語は、メモリ管理の安全性を強化し、型安全性を向上させることで、プログラマーの負担を軽減し、バグの発生を抑えることを目指しています。
C++ には標準規格があり、規格に合致するかたちで処理系が実装されることによって、異なるプラットフォーム間での互換性が保たれています。
国際標準規格が ISO(International Organization for Standardization)によって、ISO/IEC 14882 として、1998年に制定され、その後も改訂を繰り返しています。2025年現在、C++98、C++03、C++11、C++14、C++17、C++20、C++23 といった通称で呼ばれるバージョンが存在しており、C++26 の策定作業中です(それぞれの番号は改訂時の西暦年を表しています)。
改訂のたびに新機能が追加されたり、仕様の一部が修正されたりしているほか、問題があることが発覚した機能が非推奨となったり削除されたりするケースもあります。また、C言語の標準規格とのあいだで連携を取り、互いの機能を取り込みあうなどの動きもみられます。
C++ の機能の詳細な解説については、C++編や新C++編を参照してください。C++編は C++03 をベースにした解説、新C++編は C++14 をベースにした解説になっています。
Programming Place Plus のトップページへ
はてなブックマーク に保存 | Pocket に保存 | Facebook でシェア |
X で ポスト/フォロー | LINE で送る | noteで書く |
![]() |
管理者情報 | プライバシーポリシー |