2016-12-16 14 views
0

testinfポインタ無効の2つの方法、つまりif(pointer==NULL)またはif(!pointer)の間で最も効率的なものは何ですか?C++ - nullポインタをテストする最も効率的な方法は何ですか?

MyObject* p; 
[...] 
// Solution 1 
if (p) 
{ // Do something 
} 
// Solution 2 
if (p!=NULL) 
{ // Do something 
} 
+10

私は大いに疑問に思う。彼らは異なるアセンブリにコンパイルする。 – BoBTFish

+3

@BoBTFish疑いの余地はありません。私は試してみることができます。 https://godbolt.org/g/cCrgUb –

+0

私によると、私は私たちのプロジェクトで使用したものはどちらも同じです。あなたのコード要件に応じて、あなたが実行したいものに応じて満足したい場合は、もしあなたがIfでそれ以上使用する前に、あなたのポインタがNULLに初期化されていることを確認してください。 –

答えて

12

これまでのところ何の違いもありません。それは純粋にあなたが好むスタイルの問題です。

ところで、C++ 11以降を使用している場合は、NULLではなくnullptrを使用する必要があります。

0

これらは同じです。あなたのプログラムに何の変更も加えません。

5

ので、私はif (ptr)を好む:NULLキーワードに依存せず、短いと

  • 明らかである

    1. 。 C++ 11以降のnullptrJesper Juhl mentionedとする必要があります。 SoapBox's comment on stackoverflowから

    彼らはまさにこのイディオムを有効にするには、BOOLへの変換を提供し、ポインタとしての役割を果たすオブジェクトであるなどのauto_ptrとしてC++のクラスと互換性があります。これらのオブジェクトの場合、NULLとの明示的な比較では、他の意味的な副作用を持つポインタへの変換を呼び出さなければならないか、ブール変換が意味する単純な存在チェックよりも高価になります。それは宣言し、それを使用する間、例えばintのように、他の事にpのキャスティングのような形の偶発的エラーを防ぐよう

  • 0

    私はむしろif (p!=NULL)を好むだろう。あなたはpは文句を言わないゼロの異なる値を持っていることを保証することはできませんので

    MyObject* p=NULL; 
    

    ここでは、コンパイラはintとして警告する必要がありますが、フォームNULL(当初NULL=(void*)0

    を異なるさらに、私はこのように宣言することを好みます。あなたが宣言と使用の間でそれをインスタンス化するのを忘れた場合。

    そして、それは偶然の割り当て(のみ1 =)C++ 11以降これもあなたのコード内のいくつかの変更を伴う可能性がでコースオフ

    に発生することがあり if (p==NULL){} else {}未満誤解を招きますNULLの呼び出しがまだ機能していますが、非推奨です。

    関連する問題