C ++ - 测试空指针的最有效方法是什么?

时间:2016-12-16 08:24:32

标签: c++ performance pointers

测试指针无效的两种方法之间最有效的是:if(pointer==NULL)if(!pointer)

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

4 个答案:

答案 0 :(得分:12)

这没有什么区别。它纯粹是你喜欢的风格问题。

顺便说一句,如果您使用C ++ 11或更高版本,则应使用nullptr而不是NULL

答案 1 :(得分:5)

我更喜欢if (ptr)因为:

  1. 简短明了
  2. 它不依赖于NULL关键字。在C ++ 11或更高版本中,Jesper Juhl mentioned必须是nullptr
  3. 来自SoapBox's comment on stackoverflow
  4.   

    它们与C ++类兼容,例如auto_ptr,它们是充当指针的对象,并提供转换为bool以准确启用此习语。对于这些对象,与NULL的显式比较必须调用转换为指针,这可能具有其他语义副作用,或者比bool转换所暗示的简单存在检查更昂贵。

答案 2 :(得分:1)

那些是一样的。无论你使用什么,它都不会改变你的程序。

答案 3 :(得分:0)

我宁愿选择if (p!=NULL),因为它可以防止形成意外错误,比如将p转换为其他内容,例如int,在声明和使用之间

这里编译器应该警告,因为NULL(最初NULL=(void*)0

的int不同

此外,我更喜欢这样声明:

MyObject* p=NULL;

因为你无法保证p不会有与zéro不同的值。如果你错过了在声明和使用之间实例化的话。

它没有误导性 if (p==NULL){} else {}可能发生在意外分配中(只有一个=)

C ++ 11 或更高版本当然,即使NULL的调用仍在使用但已弃用,也可能会对代码进行一些更改。