6.5.10 相等运算符
相等运算符包括:
==!=
下列情形之一必须成立:
- 两个操作数都具有算术类型;
- 两个操作数都是指向兼容类型的指针;
- 一边是对象指针,另一边是
void指针; - 两边都是
nullptr_t; - 一边是
nullptr_t,另一边是空指针常量; - 一边是指针,另一边是空指针常量或
nullptr_t。
若任一操作数是十进制浮点类型,则另一操作数不得是标准浮点类型、复数类型或虚数类型。
==与!=的结果都是int类型的1或0;对任意一对合法操作数,二者恰有一个为真。若两个操作数都具有算术类型,则先执行通常算术转换。正零与负零比较相等。
复数值相等,当且仅当实部相等且虚部也相等。
若两边都是
nullptr_t,或者一边是nullptr_t、另一边是空指针常量,则它们比较相等。若至少一边是指针:
- 指针与空指针常量或
nullptr_t比较时,若该指针是空指针,则相等; - 对象指针与
void指针比较时,会先把对象指针转换到void指针类型。
- 指针与空指针常量或
两个指针相等,当且仅当:
- 两者都是空指针;
- 两者都指向同一对象或同一函数;
- 两者都指向同一数组的同一尾后位置;
- 或一者指向某个数组尾后位置,另一者恰好指向在地址空间中紧随其后的另一个数组起始位置。
在这些运算符中,一个并非数组元素的对象指针,同样按“长度为 1 的数组首元素指针”处理。
NOTE
相等比较能定义的指针场景,比关系比较更宽一些;但也绝不是“所有地址都能随便比较”。