3

主なことは、null ポインターを処理するベスト プラクティスがわからないことです。

コードは次のとおりです。

int GetSomeVal()
{
    if(ptr)
    {
        return *ptr
    }
    else
    {
        // What here?
        // Should I return 0? or -1 or throw an exception?
    }
}

Google の C++ スタイル ガイドでは、例外の使用を推奨していないため、この質問を受けました。これは別のトピックになる可能性があります。

例外を使用する必要がある場合、例外クラスを設計してスローする必要があるということですか? 例外を使用しない場合のベスト プラクティスは何ですか?

4

3 に答える 3

7

であることが理にかなっている場合は、例外をスローしptrないNULLでください。例外は、何かがうまくいかなかったことを示すために使用されます。

何か問題があった場合ptrは、必ず例外をスローしてください。NULL

Google のコード スタイルは Google によって使用されます。それらは、高水準オブジェクト指向言語で通常使用される多くのこと (参照引数、例外など) を禁止します。Google で働いている場合を除き、従うべきではありません。

独自の例外クラスを設計し、それを から派生させ、それをstd::exceptionコードからスローすることができます。

また、あなたのコードからptr、メンバーです。コンストラクターで初期化されるはずだったのに初期化されなかった場合は、おそらくコンストラクターから例外をスローする必要があります。使えないものがあっても意味がありません。

于 2012-08-27T07:05:52.993 に答える
1

機能仕様に大きく依存します。

ptr==NULL関数への有効だが例外的な入力である可能性があります。たとえば、プログラムへの入力データが正しくないことが原因でした。それを処理する最善の方法は、エラー コードを返すか、コール チェーンで処理されることを意図した例外をスローすることです。

他のケースでptr==NULLは、設計上決して発生することはありませんが、他の場所のバグが原因でのみ発生します。最善の方法は、エラーを記録してプログラムを終了することです。

于 2012-08-27T07:30:45.823 に答える
1

例外をスローしたくない場合に備えて、これらのオプションをこの順序で使用します

  1. boost::optional

  2. int GetSomeVal(int &ok)-falseポインタがNULL

  3. NULLポインターが(-1たとえば) の場合、何らかのエラー コードを返します。

于 2012-08-27T07:05:42.037 に答える