C++ - “!指针”和 "pointer == nullptr" 之间的区别?

C++ - Difference between "!pointer" and "pointer == nullptr"?

所以我从一个函数中发现了这段代码

void remove(Node * & p, const int & key){
  if(!p){
    throw out_of_range("The key you're looking for can't be found\n");
  }
  if(p == nullptr){
    return;
  }

而且我不太明白!pp == nullptr之间的区别。从我读到的有关 C++ 的内容来看,这两个语句似乎总是等价的。他们不是吗?我错了吗?

需要一些说明。

谢谢!

第一个 "if" 实际上比较 p == 0(换句话说!p)。它是一种 C 的 NULL 桥接到 C++ 中,可能会导致重载函数中的歧义。 例如: 检查(整数)和检查(整数*)。

第二个 if 是根据指针类型 (nullptr) 检查 p

其实两者是一样的。您可以使用两者检查指针是否为空。

nullptr was introduced in C++11 which can be used like if(p == nullptr) which is preferred over if(!p)

希望这对您有所帮助:)

首先

  • 两者 100% 相同,含义相同,工作方式相同
  • 开发人员刚刚使用了 2 个 If 语句(第一个显示未找到的消息) 和第二个到 Return 返回,虽然他可以在 1 中做到这两点如果也一样,也许他只是想 表明他知道这两种方法,这就是他这样做的原因,否则就没有 两者之间的差异,而且可能需要多花一个 BIG O 时间。 - 如需更清晰的视图,您可以访问此 link (difference between p == NULL and !p in c++)

详细答案如下:

!p 和 p==nullptr 都具有相同的 Working 您的案例中的代码显示, if(!p) 和 if(p==nullptr) 都用于显示,开发人员知道这两种方法,并且他是熟悉旧版本 C++ 的高级开发人员 因为如果他使用

if(!p){throw out_of_range("The key you're looking for can't be found\n");
return;
}
or Uses
if(p==nullptr)
{throw out_of_range("The key you're looking for can't be found\n");
return;}

但在你的案例中,Only Thing 开发者做到了 显示在第一个 IF 中找不到节点的消息 并在第二个 If.No 中返回函数,不管他在想什么或他打算做什么,但两者都是一样的,它只是使用了另一个根本不需要的 IF

如果您仍然需要更多关于两者之间的详细区别的帮助,您可以在 difference between p == NULL and !p in c++

查看