多くの人は、まるで同じものであるかのように、「C/C++」を書く傾向があります。それらは多くの類似点を共有していますが、明らかに同じではありません。
しかし、CとC++の根本的な違いは何ですか? C++はCの拡張バージョンですか、それともC++にはない機能がCにありますか?
以下の点はC++に関連しています。
C++は、Cが処理できない複雑さを管理するために発明されました。たとえば、Cの一般的な問題は、カプセル化や名前空間などがないため、「変数の名前が不足する」ことになります(文字どおりに解釈されるべきではありません)。
また、Cには例外がありません。したがって、関数の戻り値を常に確認することはライブラリユーザーに依存するため、エラー処理は非常にエラーが発生しやすくなります。一方、例外がある場合、ライブラリ開発者はプログラムフローの停止を保証する例外をスローするだけです。
C++は、コンパイラーによって自動的に呼び出されるコンストラクターの初期化オブジェクトを持つことで役立ちます。プログラマーが初期化する必要があるC構造体とは異なり(エラーが発生しやすい別の領域)。
最後に、オブジェクトの再利用や、ソースコードなどの再利用を可能にするテンプレートやジェネリックなどのジェネリックプログラミングベースの概念など、OOPが推奨する多くの他の利点があります。
一般に、Cに存在するものはすべてC++でサポートされています。明らかにその反対は絶対に誤りです。
簡単に言えば、C++はオブジェクト指向です(たとえば、クラスがあります)。Cはそうではありません。
C++にはブール型があり、C89にはありません。
彼らは異なる言語です。構文のほとんどを共有しています。
C99には、C++には存在しない(少なくともまったく同じ形式の)機能がいくつかあります(たとえば、柔軟な配列メンバー、可変長配列など)。
C99は、C++ 98/03標準にはないライブラリにも多くを追加しました。ただし、これのほとんどはC++ 11に追加されています。
基本的な方向に関して、Cは基本的に構造化手続き型プログラミングをサポートしています。 C++は、オブジェクト指向プログラミング、汎用プログラミング、およびメタプログラミング(コンパイル時に任意の計算を実行する)だけでなく、それもサポートしています。 C++ 11を使用すると、少なくとも関数型プログラミングのサポートと間違われる可能性があるいくつかの要素が追加されます(ラムダ式など)。 C++ 14にはさらにいくつか追加されていますが、それらのほとんどは、方向の大幅な変更というよりも、本当に便利です。
個人的には、テンプレートはC++がCに追加する最も重要な機能だと思います。