是否为非空原始指针nullptr < ptr
定义了操作ptr < nullptr
和ptr != nullptr
?欢迎来自C ++标准的报价。
答案 0 :(得分:4)
这种比较结构良好,但其结果未明确。
[expr.rel] / 3 比较指向对象的指针定义如下:
- 如果两个指针指向同一个数组的不同元素或其子对象,则指向具有较高下标的元素的指针会比较大。
- 如果一个指针指向一个数组的一个元素或一个子对象,而另一个指针指向一个超过该数组最后一个元素的指针,则后一个指针将比较大。
- 如果两个指针指向同一对象的不同非静态数据成员,或者指向这些成员的子对象,则递归地指向稍后声明的成员的指针比较更大,前提是两个成员具有相同的访问控制(第11条)并且提供他们的班级不是工会。
[expr.rel] / 4 如果两个操作数
p
和q
比较相等(5.10),p<=q
和p>=q
都会产生true
和p<q
以及p>q
都会产生false
。否则,如果指针p
的比较大于指针q
,则p>=q
,p>q
,q<=p
和q<p
都会产生{{1} }和true
,p<=q
,p<q
和q>=p
都会产生q>p
。否则,未指定每个运算符的结果。
空指针不属于 [expr.rel] / 3 的三个子句中的任何一个,因此它既不比非空指针也要小于非空指针。然后这个案子落入&#34;否则&#34; [expr.rel] / 4 。
的条款