C++ は、Bjarne Stroustrup 著『C++ Programming Language』(1986 年刊) で初めて登場し、その後、より公式の解説書として、Margaret Elis、Bjarne Stroustrup 共著『注解 C++リファレンス・マニュアル』(通称 ARM、トッパン刊) が刊行されました。Sun C++ 4 コンパイラは、主としてその ARM の定義に基づき、それに、当時登場しつつあった C++標準の一部の仕様が追加されたものです。C++ 4、特に C++ 4.2 コンパイラに追加された仕様の大部分は、ソースレベルおよびバイナリレベルの互換性の問題を起こさないものに限られていました。
現在 C++ は、国際標準の 1 つ、ISO/IEC 14882:1998 Programming Languages - C++ によって標準が規定されています。標準モードでは、ほぼすべての言語仕様が、この国際標準の規定どおりに実装されています。現在のリリースに付属している README (最新情報) ファイルには、この標準と異なる仕様の説明が含まれています。
C++ 言語の定義は変更されています。このため、古いソースコードをそのままではコンパイルできないことがあります。この最も顕著な例は、C++の標準ライブラリ全体が名前空間の std に定義されるようになったという点です。今や、標準のヘッダー名は.h なしの <iostream> であり、名前の cout および endl は大域名前空間ではなく名前空間 std に存在するため、標準に厳密に準拠したコンパイラでは従来の C++プログラムをコンパイルすることはできません。
#include <iostream.h> int main() { cout <<“Hello, world!”<< endl; }
C++ 5.0 コンパイラには拡張機能として、標準モードでも従来の C++プログラムがコンパイルできるように <iostream.h> ヘッダーが用意されています。言語の変更は、ソースコードの修正を必要とするばかりでなく、バイナリレベルの互換性の問題を起こします。そのため、バージョン 5.0 より前の Sun C ++コンパイラには、C++ 標準に準拠するための変更は行われていません。
新しい C ++言語機能には、プログラムのバイナリ表現の変更を伴うものあります。この問題については、「バイナリ互換の問題」でさらに説明します。