[英]What is the most efficient way to store a char pointer into a string in 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)
因為:
NULL
關鍵字。 正如Jesper Juhl所述,在C ++ 11或更高版本上必須為nullptr
。 它們與諸如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.