C++ - “!pointer”和“pointer == nullptr”之间的区别?
Posted
技术标签:
【中文标题】C++ - “!pointer”和“pointer == nullptr”之间的区别?【英文标题】:C++ - Difference between "!pointer" and "pointer == nullptr"? 【发布时间】:2020-02-23 17:53:10 【问题描述】:所以我从一个函数中发现了这个小sn-p代码
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++ 的内容来看,这两个陈述似乎总是等价的。他们不是吗?我错了吗?
需要澄清一下。
谢谢!
【问题讨论】:
有趣的问题在上下文中,因为代码中的p
是对指针的引用。这有什么不同吗?
代码 sn-p 中的第一个和第二个if
之间真的没有任何东西吗?
@t.niese 不,没什么。
它们是一样的。不要在没有放置逻辑的地方寻找逻辑。
【参考方案1】:
其实两者都是一样的。您可以使用两者来检查指针是否为空。
nullptr 是在 C++11 中引入的,它可以像 if(p == nullptr) 一样使用,它优于 if(!p)
希望这会有所帮助:)
【讨论】:
好的,谢谢!每个人都在说它是一样的。似乎编写该代码的人只是犯了一个错误或更加偏执:) 他们可能会在 MCQ 中问这些类型的问题,例如将执行哪个 if 块;)【参考方案2】:第一个“if”实际比较的是 p == 0(换句话说 !p)。它是一种 C 的 NULL 桥接到 C++ 中可能会导致重载函数的歧义。 例如: 检查(int)和检查(int*)。
第二个 if 是根据指针类型(nullptr)检查 p
【讨论】:
对不起,但对我来说仍然不是很清楚(我是 C++ 新手)。检查指针是否为空和检查指针类型是否为“nullptr”有什么区别......对我来说听起来一样。【参考方案3】:首先
两者 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++
【讨论】:
以上是关于C++ - “!pointer”和“pointer == nullptr”之间的区别?的主要内容,如果未能解决你的问题,请参考以下文章
“C++ void Pointer”和“C# var”之间的区别
什么是C ++中Reference和Pointer返回类型之间的区别
Qt4 C++ Pointer to const QList of pointers