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