非空原始指针和 nullptr 之间的小于运算符

Vin*_*ent 4 c++ standards comparison-operators nullptr c++11

非空原始指针的操作nullptr < ptrptr < nullptr定义是否良好ptr != nullptr?欢迎引用 C++ 标准。

Igo*_*nik 5

这种比较格式良好,但其结果未指定。

[expr.rel]/3比较指向对象的指针定义如下:

——如果两个指针指向同一个数组的不同元素或其子对象,则指向下标较高的元素的指针比较大。

— 如果一个指针指向数组的一个元素或其子对象,而另一个指针指向数组的最后一个元素,则后一个指针比较大。

— 如果两个指针递归地指向同一对象的不同非静态数据成员或此类成员的子对象,则指向后声明成员的指针比较大,前提是这两个成员具有相同的访问控制(第 11 条)并提供他们的班级不是工会。

[expr.rel]/4如果两个操作数pq比较相等(5.10),p<=q并且p>=q都产生truep<q并且p>q都产生false。否则,如果一个指针p比较大于一个指针q, p>=q, p>q, q<=p, 并且q<p所有 yieldtruep<=q, p<q, q>=p, 和q>pall yield false。否则,每个运算符的结果都是未指定的。

空指针不属于[expr.rel]/3的三个子句中的任何一个,因此它既不大于也不小于非空指针。这种情况则属于[expr.rel]/4的“otherwise”子句。