c++ - 您可以将 nullptr 与其他指针进行比较以进行排序吗?它总是更小吗?
问题描述
这个问题是基于我发现监视可能的内存泄漏的代码,因此它包含一些您可能不希望在常规程序中看到的代码,例如排序指针。
但是,我看到一个指针被设置为nullptr
,然后将该指针与最大地址进行比较。C++ 标准是否保证它nullptr
总是小于其他指针operator<
?
解决方案
您可以将 nullptr 与其他指针进行比较以进行排序吗?
不,您不能对nullptr
指针或其他空指针常量进行有序比较。
对于我的其余答案,我将介绍“您可以将具有空值的指针与其他指针进行比较以进行排序吗?”
是的。但结果是否有用是另一回事。
它总是更小吗?
不。除非另一个操作数也为空,否则在这种情况下,两个操作数都不能保证比较更大或更小。
标准报价(最新草案):
[expr.rel]
比较指向对象的不相等指针的结果是按照符合以下规则的偏序定义的:
- [不适用]如果两个指针指向同一个数组的不同元素,或者指向其子对象,则需要指向具有较高下标的元素的指针比较较大。
- [不适用]如果两个指针指向同一对象的不同非静态数据成员,或者指向此类成员的子对象,递归地,如果两个成员具有相同的访问权限,则需要指向后面声明的成员的指针比较更大控件([class.access]),两个成员都不是大小为零的子对象,并且它们的类不是联合。
- [适用]否则,两个指针都不需要比较大于另一个。
std::less
如果您需要严格的总顺序,您应该使用比较指针。Null 仍然不能保证作为最小值进行比较。
推荐阅读
- ios - How can I present VC and set as new Root viewController in Swift?
- arrays - 如何在 bash 脚本中通过函数调用将 args/参数从一个函数传递到另一个函数
- javascript - 如何在 Python Altair Chart.save(file.html) 生成的 Altair Chart 的 html 文件中显示默认工具提示?
- c++ - How to find the lowest value out of a set of variables
- wordpress - 如何将我的域名连接到我的 wordpress 网站?
- php - 在 laravel 5.6 中雄辩地返回空值
- quickblox-android - applicationId 为空。应用程序进入后台很长时间后在quickblox android中
- python - 使用python中的进程或池多处理将具有预设变量的代理对象(函数)从主程序传递到子进程
- mysql - 当连接表上没有匹配项时,如何从一个表中选择所有记录?
- r - 使用 HTML 为传单设计悬停文本 - 如何为每个逗号插入中断