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

问题描述 投票:1回答:3

所以我从一个函数中碰到了这小段代码

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 ++的了解,这两个语句似乎总是等效的。不是吗我错了吗?

需要澄清。

谢谢!

c++ pointers syntax reference boolean-expression
3个回答
1
投票

实际上两者是相同的。您可以同时使用两者检查指针是否为空。

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

希望这会有所帮助:)


1
投票

第一个“ if”实际上是在p == 0时进行比较(换句话说,!p)。这种C的NULL桥接到C ++中可能会导致重载函数产生歧义。例如:check(int)和check(int *)。

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


1
投票

首先]

  • 两者都是100%相同,相同的意思是相同的工作
  • 开发人员刚刚使用了2个If语句(第一个显示未找到的消息)和第二个人返回,虽然他可以在1中同时完成这两个任务,但也许他只是想表明他知道这两种方法,这就是为什么他那样做,否则就没有了两者之间的差异,可能还需要花费更多时间。-为获得更清晰的视图,您可以访问此链接(difference between p == NULL and !p in c++
  • 详细的答案在下面:

!p和p == nullptr都具有相同的工作您的案例中的代码表明,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;}

但是在您的情况下,他唯一的开发者显示了在第一个IF中找不到节点的消息并在第二个If中返回了该函数。无论他的想法或意图是什么,但是两者相同,并且仅使用了另一个根本不需要的IF]

如果仍然需要有关两者之间的详细区别的更多帮助,可以在difference between p == NULL and !p in c++处进行检查>

© www.soinside.com 2019 - 2024. All rights reserved.