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;
}
而且我不太明白!p
和p == 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++
查看
所以我从一个函数中发现了这段代码
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++ 的内容来看,这两个语句似乎总是等价的。他们不是吗?我错了吗?
需要一些说明。
谢谢!
第一个 "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++
查看