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

时间:2017-07-11 00:48:27

标签: c++ c++11 standards comparison-operators nullptr

是否为非空原始指针nullptr < ptr定义了操作ptr < nullptrptr != nullptr?欢迎来自C ++标准的报价。

1 个答案:

答案 0 :(得分:4)

这种比较结构良好,但其结果未明确。

  

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

     

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

     

- 如果一个指针指向一个数组的一个元素或一个子对象,而另一个指针指向一个超过该数组最后一个元素的指针,则后一个指针将比较大。

     

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

     

[expr.rel] / 4 如果两个操作数pq比较相等(5.10),p<=qp>=q都会产生truep<q以及p>q都会产生false。否则,如果指针p的比较大于指针q,则p>=qp>qq<=pq<p都会产生{{1} }和truep<=qp<qq>=p都会产生q>p。否则,未指定每个运算符的结果。

空指针不属于 [expr.rel] / 3 的三个子句中的任何一个,因此它既不比非空指针也要小于非空指针。然后这个案子落入&#34;否则&#34; [expr.rel] / 4

的条款