2016-12-16 49 views
0

两种testinf指针无效方式之间最有效的方法是:if(pointer==NULL)if(!pointer)C++ - 什么是测试空指针最有效的方法?

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

我**高度怀疑他们编译到不同的程序集。 – BoBTFish

+3

@BoBTFish我毫不怀疑。我可以试试。 https://godbolt.org/g/cCrgUb –

+0

据我说,我在我们的项目中使用的两个工作都是一样的。它取决于你的代码要求,如果你想根据你想要执行的内容来满足条件,如果满足true。最重要的是确保你的指针初始化为NULL,然后在If中进一步使用它。 –

回答

12

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

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

0

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

5

我喜欢if (ptr)因为:

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

它们与C++类如auto_ptr的是充当指针和其提供转换到bool启用正是这种成语对象兼容。对于这些对象,与NULL的显式比较将不得不调用对指针的转换,该指针可能具有其他语义副作用或比bool转换意味着的简单存在检查更昂贵。

0

我宁愿喜欢if (p!=NULL)因为它可以防止意外的形式类似的错误在其他事情铸造p,像int例如,声明和使用它之间。

这里编译器应该警告为INT不同形式NULL(最初NULL=(void*)0

而且我宁愿声明是这样的:

MyObject* p=NULL; 

,因为你不能保证p不会有零的不同值。如果你想在声明和使用之间实例化它。

它比它可以在一个偶然的分配发生 if (p==NULL){} else {}少误导性(只有一个=)

关过程中C++ 11或更高版本,这可能涉及你的代码的一些变化,甚至如果NULL的呼叫仍然有效但已弃用。

相关问题