繁体   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