检查指针的空值:!pointer 还是 pointer == nullptr?

4
假设我有一个指针:int *pointer
如果我想测试它是否为空,我应该这样做: if(pointer == NULL)
bool nullability = !pointer;

或者使用:
bool nullability = (pointer == nullptr);

这两个表达式是否等价? 如果不是,为什么?有哪些副作用?


1
这里有一些想法,可以参考:https://dev59.com/S2Mm5IYBdhLWcg3wO9Aq#17774781 - Federico klez Culloca
2个回答

10

两者相等,因为在将其转换为布尔值时,nullptr会被保证转换为false

来自N4296:

4.12布尔类型转换
1算术类型、无作用域枚举类型、指针类型或成员指针类型的prvalue可以转换为bool类型prvalue。零值、null指针值或null成员指针值被转换为false;任何其他值都会被转换为true。对于直接初始化(8.5),std::nullptr_t类型的prvalue可以转换为bool类型的prvalue;结果值为false。


2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接