比较nullptr的惯用方法:if(p)vs if(p!= nullptr)

And*_*dre 6 c++ pointers c++11

比较指针的惯用方法是nullptr什么?

if (ptr) ...
if (!ptr) ...
Run Code Online (Sandbox Code Playgroud)

要么

if (ptr != nullptr) ...
Run Code Online (Sandbox Code Playgroud)

我知道两者都是等价的,但哪个更好?

就个人而言,我发现第一个版本更容易阅读.但是从0文字隐式转换到nullptr不再被认为是惯用语(比如用于初始化),我想知道对指针的隐式转换是否也是如此bool.

是否有任何客观理由偏好一个而不是另一个?

作为类比,考虑一个功能void foo(void*).在这里,调用foo(nullptr)而不是依赖于隐式转换foo(0)更好,因为一旦我们添加了重载,后者就会中断void foo(int).