C++ - "!pointer"和"pointer == nullptr"的区别?

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

本文关键字:pointer 区别 nullptr C++      更新时间:2023-10-16

所以我发现了一个函数中的一小段代码

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

并且我不太理解CCD_ 1和CCD_。从我读到的关于C++的内容来看,这两个语句似乎总是等价的。不是吗?我错了吗?

需要澄清一下。

谢谢!

实际上两者是相同的。您可以同时使用这两种方法来检查指针是否为null。

nullptr是在C++11中引入的,它可以像if(p==nullptr(一样使用,它比if(!p(更可取

希望这有帮助:(

如果p==0(换句话说!p(,第一个"if"实际上会进行比较。它有点像C的NULL桥接到C++中,可能会在重载函数中引起歧义。例如:check(int(和check(int*(。

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

所有中的第一个

  • 两者100%相同,相同的意思是相同的工作
  • 开发人员刚刚使用了2个If语句(第一个显示未找到它的消息(和第二个回来的人,虽然他可以在1中做到这两件事,如果也是,也许他只是想表明他知道这两种方法——这就是他这样做的原因——否则就没有两者的差异,可能还需要一个大O时间。-要获得更清晰的视图,您可以访问此链接(p==NULL和c++中的!p之间的差异(

详细答案如下:

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 foundn");
return;
}
or Uses
if(p==nullptr)
{throw out_of_range("The key you're looking for can't be foundn");
return;}

但在你的案例中,唯一的开发者显示在第一个IF中找不到节点的消息并在Second If中返回了函数。无论他想做什么或他的意图是做什么,但两者都是相同的,它只是使用了另一个根本不需要的If。

如果你仍然需要更多关于两者之间详细差异的帮助,你可以检查p=NULL和!c++中的p