C++(シープラスプラス)は、汎用プログラミング言語の一つである。静的な型システムを持ち、フリーフォームでの記述が可能で、手続き型プログラミング・データ抽象・オブジェクト指向プログラミング・ジェネリックプログラミングといった複数のプログラミングパラダイムをサポートするマルチパラダイム言語である。1990年代以降、C++は、最もよく利用される商用のプログラミング言語のひとつとなっている。
C++は、1983年にベル研究所のBjarne Stroustrupが、C言語の拡張として開発した。当時の名前は「C with class」(クラス付きのC言語)というものであった。拡張はクラスの追加に始まり、仮想関数、オーバーロード、多重継承、テンプレート、例外処理といった機能が続いていった。C++言語の標準は1998年にISO/IEC 14882:1998として承認され、現在のバージョンは2003年に制定されたISO/IEC 14882:2003である。非公式にはC++0xと呼ばれている新しいバージョンが策定中である。
日本のプログラマの間では「シープラプラ」と呼ばれるが、これは日本以外では通用しない呼び方である。
1983年にC with ClassesからC++に名称を変更した。追加された新しい機能は、仮想関数と、関数と演算子のオーバーロード、参照型、const型、ユーザー制御可能な自由領域メモリ制御、より進んだ型検査機構、新しいコメント形式(//)であった。1985年には「The C++ Programming Language」の初版が出版された(日本語訳「プログラミング言語C++」の初版は1988年)。公式な標準がまだなかったため、この本がリファレンスとなった。1989年には、C++の2.0がリリースされた。新しい機能には、多重継承と抽象クラス、スタティックメンバ関数、constメンバ関数、protectedメンバが含まれた。1990年に「The Annotated C++ Reference Manual」(通称ARM)が出版され、将来の標準の土台を提供した。後に追加された機能にはテンプレートと例外処理、名前空間、新しい形式のキャスト、ブール型が含まれた。
C++言語の進化に伴い、標準ライブラリもまた進化していった。C++標準ライブラリに最初に追加されたのは、従来のC言語のprintfやscanfといった関数を置き換えるしくみを提供する、ストリームI/Oライブラリであった。それ以降の標準ライブラリへの追加で最も重要なものはStandard Template Library(STL)である。
長年にわたる作業の後、ANSIとISOの合同委員会はC++言語を1998年に標準化した(ISO/IEC 14882:1998)。1998年の標準の公式なリリースから数年間に渡って委員会は不具合の報告を続け、2003年に訂正版を出版した。2005年に「Library Technical Report 1」(TR1)というテクニカルレポートがリリースされた。これは標準の公式な一部ではないが、次のバージョンのC++に含まれると期待される、標準ライブラリへの数多くの拡張を与えている。現在メンテナンスされているC++コンパイラの大部分が、TR1のサポートに取り組んでいる。
2003年12月に制定された日本工業規格 JIS X 3014:2003 (プログラム言語 C++)は、ISO/IEC 14882:2003(E)の翻訳である。
C++言語は誰の所有物でもなく、実際ロイヤリティフリーである。しかし標準文書自体は無償提供されていない。ただし、JIS X 3014:2003はJISCのWebサイトから閲覧のみは無償である。
Stroustrupは著書「The C++ Programming Language」の前文で名前の起源を語り、ジョージ・オーウェルの「1984年」の付録から「C++」が連想されるかもしれないと付け加えている。新語法という架空の言語の解説に宛てられた3つの章の中に、科学技術に関する専門用語とジャーゴンの解説に宛てられた「C vocabulary」という章がある。新語法で「ダブルプラス」は最上級の修飾語である。ゆえに新語法で「C++」は「最も極端な専門用語またはジャーゴン」という意味になるであろう。
1992年、Rick Mascittiは名前について非公式に質問されると、彼はおふざけのつもりで命名したという旨の回答をした。彼はこの言語の正式な名称になるとは夢にも思わなかったのである。
長年にわたって、異なるC++のコンパイラはC++言語を異なるレベルの遵守性を持って実装してきて、それらの実装はテンプレートの部分的特殊化のようにさまざまな領域に広がっていた。最近のほとんどのC++のコンパイラは標準C++ 1998のほとんどの機能をサポートしている。論点の1つは 、テンプレートの宣言から離れてテンプレートを宣言することを許すexportというキーワードである。最初にexportを実装したコンパイラは2003年初め(規格の発表の5年後)にリリースされたComeau C++であった。続いて2004年Borland C++ Builder Xのベータ版のコンパイラがやはりexportを実装してリリースされた。これらどちらのコンパイラもEDG C++フロントエンドに基づいていた。多くのC++の本(例えばイヴァン・ホートンのBeginning ANSI C++)がコンパイルされないだろうが、exportというキーワードに関する問題への参照がなかったexportというキーワードを実装したコードの例を提供したということも心に留めておくべきである。Microsoft Visual C++やGCCのようなコンパイラははまったくそれをサポートしていない。C++標準化委員会の書記官ハーブ・サッターは、exportは将来のC++の標準から除かれるべきである( *)と勧めていたが、結局結論はそれをC++の標準に残すというものに達した。
(以下は旧コンテンツ)
1979年にビャーネ・ストロヴストルップ (Bjarne Stroustrup) によって考案された。初めはC with Classesと呼ばれていたが、1983年にC++という名前になった。C言語では変数に1を加えるのを++と書くことができ、C++という名前にはCを発展させたものという意味がある。記号を含まないCPPというアクロニムも提案されたが、Cプリプロセッサの略記Cppと紛らわしいため却下された。
1990年にはThe Annotated Reference Manual(ARM)が出版された。これはC++の言語仕様を記した本であり、ISOで国際規格が制定されるまではこれがC++の仕様の拠り所とされ広く参考にされた。
1998年9月には国際規格 ISO/IEC 14882:1998(E) Programming Languages --- C++ が制定された。2003年10月には国際規格 ISO/IEC 14882:2003(E) が制定され、12月にはその翻訳として、日本工業規格 JIS X 3014:2003 (プログラム言語 C++)が制定された。
その後、先祖であるC言語の標準規格制定時には、const修飾など、C++の機能がC言語に取り入れられることにもなった。現在ではC言語とC++との間には厳密な互換性はない。特にC99の出現により、C言語との互換性は完全に失われている。
次のような多種多様な機能を持っており、言語仕様は大変複雑である。言語仕様を完全に満たしているコンパイラは、現在数えるほどしかない。
ここから、よりオブジェクト指向を強化し、「なんでもあり」ではない代わりに分かりやすくスマートな設計を目指した新たな言語(Java言語、D言語など)が作られることとなった。
単一行コメントはもともと、C言語の祖先にあたるBCPLに含まれていた仕様である。現在のC++のコンパイラの多くがC言語のコンパイラとしても使えるようになっているのと同様に、C言語が生まれて間もない頃は、C言語に加えB言語やBCPLのコンパイルができるコンパイラが用いられていた。それらコンパイラは、C言語のソースであってもBCPLと同様に単一行コメントが使用できるよう独自の拡張がなされていたため、BCPLの単一行コメントに慣れ親しんでいだプログラマ達は、C言語でも単一行コメントを使い続けた。その慣習がC++の誕生時まで生き残っていたため、C++では単一行コメントを「復活」させることになったのである。
そのためもあって、C言語での仕様外の単一行コメントの使用は半ば常習と化し、現在ではC99によって、C言語でも正式に単一行コメントがサポートされるようになった。
C++では、C言語には存在しなかった、スタックや動的配列などのデータ構造を表現するライブラリが存在する。 その標準ライブラリの中でも特にコンテナ、イテレータ、アルゴリズムを表現するものをSTLと呼ぶ。STLでは、C++のテンプレート機能と相まって、非常に強力で汎用的なデータ操作を行える。
C++ | C++ | سي++ | Си плюс плюс | C++ | C++ | C++ | C++ | C++ | C++ | C++ | C++ | C++ | C++ | سیپلاسپلاس | C++ | C++ | C++ | C++ | C++ | C++ | C++ | C++ | C++ | C++ | C++ | C++ | C++ | C++ | C++ | C++ | C++ | C++ | C++ | C++ | C++ | C++ | ภาษาซีพลัสพลัส | C++ | C++ | C++ | C++