![](/img/trans.png)
[英]What is the most efficient way to store a char pointer into a string in 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)
因为:
NULL
关键字。 正如Jesper Juhl所述,在C ++ 11或更高版本上必须为nullptr
。 它们与诸如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.