2011-08-02 18 views
3

私は約1年前にC/C++をコーディングしていましたので、良いOOとC++コードを書くための好ましい方法を学ぼうとしました。つまり、コーディング時には、何かを入力するだけでなく、何かを入力して動作するかどうかを確認するよりも、常にベストな方法を探します。 私は、C++では、引数を関数に渡してより安全にするために、生ポインタの代わりに参照を使うべきだと言ってきました。それはより良いコーディングと見なされます。しかし、多くの高品質なオープンソースプロジェクト(C++)では、参照の代わりにポインタを使用しています。すべての引数、戻り値は、より安全な参照ではなくポインタです。マイクロソフトのDirectXでさえ、より安全なオプション以上にポインタを使用します。私は参照の代わりにポインタを使用することによって利点を見ることはできませんが、実際には、生のポインタは参照よりも悪いと思います(動的な割り当てはもちろん必要ない)。良いコーディング:参照ではなくポインタ?

私の質問によれば、より良い方法があるときに、ほとんどのオープンソースプロジェクトがポインタを使用するのはなぜですか?

+4

「MicrosoftのDirectXでさえ、より安全なオプション以上のポインタを使用しています」あなたが見ているDirectX APIはどれですか?それらのほとんどはC APIであり、Cには参照がありません。 –

+1

おそらく重複している(または回答している)http://stackoverflow.com/q/57483/677667 –

+0

@Chris:それは重複ではありません。 http://meta.stackexchange.com/questions/95799/closing-as-duplicate-when-the-answers-are-duplicates –

答えて

1

「多くの高品質オープンソースプロジェクト」では、Ideomatic C++は使用されていません。このようなライブラリの多くは、C++をC言語と見なしていますが、言語としてではなく、いくつかの鐘や笛が追加されています。

しかし、特定のライブラリがなければ、参照の使用と参照の使用については何も言い難いです。 C APIを公開している場合、Cには参照がないので、もちろんポインタを使用する必要があります。

0

完璧ではないと思うコードがそうでない理由はたくさんあります。

問題の1つは、そこに多くの人が自由に時間をかけてスキルレベルを変えてくれるということです。そのため、いくつかのクラスにはCクラスが含まれているスタイルのミッシュマッシュがよくあります。

dx10のような大規模なプロジェクトでは、ポインタが他の参照を使用する理由はたくさんありますが、しばしば '純粋なC'とできるだけ簡単に統合できるようにするために多くのことがあります。参照型はありません。あるいは単にクラス抽象化されたCライブラリです。

あなたの周りに「悪い」コードがあるというだけでなく、あなた自身で書く理由もありません。

2

それが品質やないの兆候だが、Google's C++ Style Guide

に応じて参照渡しパラメータはすべてのconstをラベル付けする必要がある場合はわかりません。

...

実際には、出力引数が ポインタである一方で、入力 引数が値またはconstの参照であることを、Googleのコードでは非常に強い慣例です。

+1

私はそれが本当に品質の指標だとは思わない。 Googleのガイドは、既存の、主にC言語のコードベースで動作するコードを、新しいコードに最適であるとは限りません。たとえば、これらの理由でC++の例外を禁止します。 –

関連する問題