测试指针无效的两种方法之间最有效的是:if(pointer==NULL)
或if(!pointer)
。
MyObject* p;
[...]
// Solution 1
if ( p )
{ // Do something
}
// Solution 2
if ( p!=NULL )
{ // Do something
}
答案 0 :(得分:12)
这没有什么区别。它纯粹是你喜欢的风格问题。
顺便说一句,如果您使用C ++ 11或更高版本,则应使用nullptr
而不是NULL
。
答案 1 :(得分:5)
我更喜欢if (ptr)
因为:
NULL
关键字。在C ++ 11或更高版本中,Jesper Juhl mentioned必须是nullptr
。它们与C ++类兼容,例如auto_ptr,它们是充当指针的对象,并提供转换为bool以准确启用此习语。对于这些对象,与NULL的显式比较必须调用转换为指针,这可能具有其他语义副作用,或者比bool转换所暗示的简单存在检查更昂贵。
答案 2 :(得分:1)
那些是一样的。无论你使用什么,它都不会改变你的程序。
答案 3 :(得分:0)
我宁愿选择if (p!=NULL)
,因为它可以防止形成意外错误,比如将p
转换为其他内容,例如int
,在声明和使用之间
这里编译器应该警告,因为NULL
(最初NULL=(void*)0
)
此外,我更喜欢这样声明:
MyObject* p=NULL;
因为你无法保证p
不会有与zéro不同的值。如果你错过了在声明和使用之间实例化的话。
它没有误导性
if (p==NULL){} else {}
可能发生在意外分配中(只有一个=)
C ++ 11 或更高版本当然,即使NULL
的调用仍在使用但已弃用,也可能会对代码进行一些更改。