11

私はすでにこの投稿をチェックしましたCan I use if (pointer) instead of if (pointer != NULL)? およびネット上のいくつかの他の投稿。

しかし、2 つのステートメントの違いを述べているわけではありません。

問題: cpp コードで cpplint.py を実行すると、NULL のポインターをチェックする問題が見つかりました。シンプルな方法でチェックすることを好みました

if(pointer)         //statement1

しかし、cpplintは次のようにチェックする必要があると言います

if(pointer != NULL)        //statement2

だから私はただ知りたいのですが、statement1よりstatement2の利点はありますか? statement1が問題を引き起こすシナリオはありますか?

作業:私の知る限り、両方のステートメントの作業に違いはありません。コーディングスタイルを変更しただけです。

私は like statement1を使用することを好みます。

  • シンプルで読みやすい
  • 比較で=等しい( )よりも誤って( )が抜けているテンションがない==

しかし、cpplint はこれを問題として提起しているので、私が見逃した利点があるかもしれません。

注: Java もstatement1 をサポートしていません。

4

6 に答える 6

6

いいえ、pointer実際にポインター型である場合は違いがないため、ここでのすべてはコーディング スタイルの問題です。コーディング スタイルはさまざまなコミュニティの習慣に依存するため、一般的な推奨事項はありません。

個人的には前者の方が短くて要点がはっきりしており、偽のマクロの使用を避けることができるため、後者を好みNULLます。

CではNULL非常に異なるもの(整数またはポインター)である可能性があり、C ++ではその使用は最近では推奨されていません。少なくともnullptr, を使用する必要があります。

于 2016-07-31T10:05:31.040 に答える
3

変数がポインターかどうかを判断できるハンガリー表記を使用しています。それがネイティブかスマートである限り、違いはありません。ただし、誰かがそれを別の間接型 (例: std::optional<>) に変更すると、2 番目は失敗します。したがって、私の提案は最初のものを使い続けることです。これは Java ではなく、C++ です。

于 2016-07-31T10:07:40.493 に答える
3

C++ では、ptrがポインターであると仮定すると、比較if (ptr)if (ptr != NULL)は機能的に同等です。

C++11 以降では、代替を使用することが望ましいと見なされることがよくありますif (ptr != nullptr)

ポインターの簡単なチェックでは、これらのオプションの違いは実際にはスタイルです。メカニズムは多少異なる場合がありますが、最終的な結果は同じです。

cpplint は、ほとんどの自動化されたチェッカーと同様に、デフォルトでは、スタイル ガイドラインの違反について他のものよりも多く文句を言う傾向があります。特定の一連のガイドラインが正しいか間違っているかは、プロジェクトに何が必要かによって異なります。

ポインタと適切に比較できるクラス型 (スマート ポインタ型など) の場合、優先されるテストは、その型がサポートする操作のセット (比較演算子、暗黙の変換など) によって異なります。

于 2016-07-31T13:43:57.337 に答える
1

C、オンサイダー:

int *ptr=malloc(10*sizeof *ptr);
free(ptr); // though the memory is freed, the ptr is not auto-set to NULL
if (ptr)
{
printf ("ptr is not null\n");
}

だからあなたは置くことが期待されています

ptr=NULL; // ptr is explicitly made to point at nothing
// The above step is mandatory.

の後free

そのため、 の応答として、次のことをif-statementお勧めします。

if ( ptr == NULL ) // This is mostly a coding style & improves readability?

またはそれ以上

if ( NULL == ptr ) // less chances of error

さて、[ サイト ]はそれについて次のように述べcpplintています。

C++ ファイルがGoogle の C++ スタイルガイドに従っていることを確認する自動チェッカー

繰り返しますが、重要なのは誰かのスタイルです。たとえば、Google で誰かのコードに貢献する場合、共同作業が容易になるこのスタイルに従うことを期待されます。

于 2016-07-31T10:17:36.230 に答える
-1

if(pointer) と if(pointer != NULL) に違いはありません。if(pointer) はコードの最適化に使用されます。

于 2016-07-31T10:52:28.240 に答える