所以我从一个函数中碰到了这小段代码
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;
}
而且我不太了解!p
和p == nullptr
之间的区别。根据我对C ++的了解,这两个语句似乎总是等效的。不是吗我错了吗?
需要澄清。
谢谢!
实际上两者是相同的。您可以同时使用两者检查指针是否为空。
nullptr是在C ++ 11中引入的,可以像if(p == nullptr)一样使用,它优于if(!p)
希望这会有所帮助:)
第一个“ if”实际上是在p == 0时进行比较(换句话说,!p)。这种C的NULL桥接到C ++中可能会导致重载函数产生歧义。例如:check(int)和check(int *)。
第二个if正在根据指针类型(nullptr)检查p
首先]
详细的答案在下面:
!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++处进行检查>