3

あなたが C プログラマーまたは C をよく知っている C++ プログラマーである場合、C++ プログラマーから気づいた最も一般的な間違い/パターン/スタイルを教えてください。たとえば、C プログラマーが作成した C プログラムと C++ プログラマーが作成した C プログラムの違いに気付きましたか? C++ プログラマーが C について持ちがちな主な誤解を特定するリストを提供できれば、本当に感謝します。

C を学びたいと思っていますが、C++ のバックグラウンドがあると役に立ちますが、それが害になるのではないかと心配しています。私は、C++ を知っているので、いくつかのキーワードとライブラリを除いて、他に何も学ぶ必要がないという奇妙な思い込みを持っています。私は C++ != C を認識しているので、その仮定を持っていることに気分が悪くなりますが、C++ で C ライブラリを使用したり、他のものからレガシー手続き型 C++ を維持したりすると、違いがぼやけてしまうことがあります。

ところで、私は C に存在しない C++ の機能は何か、または「malloc」を使用して「new」を使用するかどうかを尋ねているわけではありません。

ありがとう。

4

4 に答える 4

3

非常に頻繁に起こることの 1 つは、割り当てられたメモリを適切に解放することです。特に、動的に割り当てられたメモリを含む構造に関連付けられています。C++ では、デストラクタが自動的に呼び出され、適切に記述されていれば、関連するオブジェクトのクリーンアップを処理します。C では、構造体に割り当てられたすべてのメモリを解放することを忘れないでください。または、それを行うある種の破壊関数を呼び出すことを忘れないでください。

于 2011-06-07T16:56:19.183 に答える
1

これを「間違い」と呼ぶかどうかはわかりませんが、C を使用しなければならない経験豊富な C++ プログラマーは、クラスや仮想関数テーブルのように見えるものをたくさん作成する可能性があります。

C でオブジェクト指向プログラミングを行うことは確かにできるので、これは必ずしも悪いことではありませんが、特定の問題に対してはやり過ぎかもしれません。

于 2011-06-07T16:57:32.880 に答える
1

&個人的な経験からははっきりとは言えませんが、関数パラメーターとしての参照 (変数名の先頭に追加) やenum、C++ のように s が完全修飾型ではないなど、微妙な問題に遭遇する可能性があると思います。 voidポインタを返すメモリ関数を含む...そのようなもの。

于 2011-06-07T16:57:39.137 に答える
-1

ほとんどの場合、慣用的な C コードを見つけると、それは慣用的な C++ コードに似ていますが、不足しているすべての言語機能をハックして、独自の中途半端なバージョンを実装する必要があります。たとえば、マクロ -> テンプレート/インライン関数。void* ポインター -> 継承。関数ポインタ -> 関数オブジェクト。例外 -> goto & エラーコード。

于 2011-06-07T16:53:56.190 に答える