簡體   English   中英

C ++-測試空指針的最有效方法是什么?

[英]C++ - What is the most efficient way to test null pointer?

在測試指針無效性的兩種方法之間最有效的方法是: if(pointer==NULL)if(!pointer)

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

沒什么區別。 您偏愛的純粹是樣式問題。

順便說一句,如果使用C ++ 11或更高版本,則應使用nullptr而不是NULL

我更喜歡if (ptr)因為:

  1. 簡短明了
  2. 它不依賴於NULL關鍵字。 正如Jesper Juhl所述,在C ++ 11或更高版本上必須為nullptr
  3. SoapBox對stackoverflow的評論來看:

它們與諸如auto_ptr之類的C ++類兼容,這些類是充當指針的對象,並提供對bool的轉換以完全啟用此慣用語。 對於這些對象,與NULL的顯式比較將不得不調用對指針的轉換,該轉換可能具有其他語義副作用,或者比bool轉換所暗示的簡單存在檢查更為昂貴。

那些都是一樣的。 無論您使用什么程序,都不會改變程序。

我寧願使用if (p!=NULL)因為它可以防止出現形式錯誤,例如在聲明和使用之間將p強制轉換為其他東西,例如int

在此,編譯器應發出警告,因為int與NULL形式不同(最初是NULL=(void*)0

此外,我更喜歡這樣聲明:

MyObject* p=NULL;

因為您不能確保p不會具有與zéro不同的值。 如果您錯過了在聲明和使用之間實例化它的方法。

而且它比偶發賦值中可能發生的if (p==NULL){} else {}誤導性(僅一個=)

C ++ 11或更高版本中,這當然可能涉及代碼中的某些更改,即使NULL調用仍然有效但已被棄用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM