如今,有了C++11,推荐使用什么,Zero
or NULL
?第一个还是第二个如果?
int * p = getPointer();
if( 0 == p ){
// something
}
if( NULL == p ){
// something
}
UPDATE:我忘记新的了
if( nullptr == p ){
// something
}
更新2:这些例子是为了显示编写空指针的选项,我知道写起来更愉快if( !p )
.
其他答案都是对的。但我想多说一点why nullptr
更好。
在C++11中“完美转发”非常重要。它随处可见。明显的地方是bind
and function
。但它也被用于许多其他地方。但“完美转发”并不完美。它失败的地方之一是空指针常量。
template <class T>
void display(T)
{
std::cout << type_name<T>() << '\n';
}
template <class T>
void
f(T&& t)
{
display(std::forward<T>(t)); // "perfectly forward" T
}
int main()
{
f(0);
f(NULL);
f(nullptr);
}
有了适当的定义type_name<T>()
,在我的系统上打印出:
int
long
std::nullptr_t
这可以很容易地区分工作代码和错误。如果幸运的话,您的错误将在编译时出现(带有可怕的错误消息)。但在某些情况下您也可能会遇到运行时错误。
积极禁止在代码中使用 0 和 NULL。
即使您的代码中的转发并不完美,您调用的代码(例如 std::lib)也很可能在幕后使用它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)