首页 > 解决方案 > 您可以将 nullptr 与其他指针进行比较以进行排序吗?它总是更小吗?

问题描述

这个问题是基于我发现监视可能的内存泄漏的代码,因此它包含一些您可能不希望在常规程序中看到的代码,例如排序指针。

但是,我看到一个指针被设置为nullptr,然后将该指针与最大地址进行比较。C++ 标准是否保证它nullptr总是小于其他指针operator<

标签: c++comparison-operatorspointer-arithmeticnullptr

解决方案


您可以将 nullptr 与其他指针进行比较以进行排序吗?

不,您不能对nullptr指针或其他空指针常量进行有序比较。


对于我的其余答案,我将介绍“您可以将具有空值的指针与其他指针进行比较以进行排序吗?”

的。但结果是否有用是另一回事。

它总是更小吗?

不。除非另一个操作数也为空,否则在这种情况下,两个操作数都不能保证比较更大或更小。

标准报价(最新草案):

[expr.rel]

比较指向对象的不相等指针的结果是按照符合以下规则的偏序定义的:

  • [不适用]如果两个指针指向同一个数组的不同元素,或者指向其子对象,则需要指向具有较高下标的元素的指针比较较大。
  • [不适用]如果两个指针指向同一对象的不同非静态数据成员,或者指向此类成员的子对象,递归地,如果两个成员具有相同的访问权限,则需要指向后面声明的成员的指针比较更大控件([class.access]),两个成员都不是大小为零的子对象,并且它们的类不是联合。
  • [适用]否则,两个指针都不需要比较大于另一个。

std::less如果您需要严格的总顺序,您应该使用比较指针。Null 仍然不能保证作为最小值进行比较。


推荐阅读