两种testinf指针无效方式之间最有效的方法是:if(pointer==NULL)
或if(!pointer)
。C++ - 什么是测试空指针最有效的方法?
MyObject* p;
[...]
// Solution 1
if (p)
{ // Do something
}
// Solution 2
if (p!=NULL)
{ // Do something
}
两种testinf指针无效方式之间最有效的方法是:if(pointer==NULL)
或if(!pointer)
。C++ - 什么是测试空指针最有效的方法?
MyObject* p;
[...]
// Solution 1
if (p)
{ // Do something
}
// Solution 2
if (p!=NULL)
{ // Do something
}
它是如此的没有什么区别。这纯粹是你喜欢的风格问题。
顺便说一下,如果您使用C++ 11或更高版本,则应该使用nullptr
而不是NULL
。
这些都是一样的。无论你使用什么,它都不会改变你的程序。
我喜欢if (ptr)
因为:
NULL
关键字。在C++ 11或更高版本中必须为nullptr
,作为Jesper Juhl mentioned。它们与C++类如auto_ptr的是充当指针和其提供转换到bool启用正是这种成语对象兼容。对于这些对象,与NULL的显式比较将不得不调用对指针的转换,该指针可能具有其他语义副作用或比bool转换意味着的简单存在检查更昂贵。
我宁愿喜欢if (p!=NULL)
因为它可以防止意外的形式类似的错误在其他事情铸造p
,像int
例如,声明和使用它之间。
这里编译器应该警告为INT不同形式NULL
(最初NULL=(void*)0
)
而且我宁愿声明是这样的:
MyObject* p=NULL;
,因为你不能保证p
不会有零的不同值。如果你想在声明和使用之间实例化它。
它比它可以在一个偶然的分配发生 if (p==NULL){} else {}
少误导性(只有一个=)
关过程中C++ 11或更高版本,这可能涉及你的代码的一些变化,甚至如果NULL
的呼叫仍然有效但已弃用。
我**高度怀疑他们编译到不同的程序集。 – BoBTFish
@BoBTFish我毫不怀疑。我可以试试。 https://godbolt.org/g/cCrgUb –
据我说,我在我们的项目中使用的两个工作都是一样的。它取决于你的代码要求,如果你想根据你想要执行的内容来满足条件,如果满足true。最重要的是确保你的指针初始化为NULL,然后在If中进一步使用它。 –