【发布时间】:2017-03-15 20:39:24
【问题描述】:
n1570 6.5.9.5 (Equality operators) 说:
5 ......如果一个操作数是指向对象类型的指针,而另一个是指向限定或非限定版本的 void 的指针,则将前者转换为后者的类型。
如果“前”是“后”是“指向对象类型的指针”和“指向 void 的指针”,那么这意味着,在转换之后,比较发生在两个 void*s 上,根据 6.5.9.2 , 未定义:
2.满足以下条件之一:
两个操作数都有算术类型;
两个操作数都是指向兼容类型的合格或不合格版本的指针;
一个操作数是指向对象类型的指针,另一个是指向限定或非限定版本的 void 的指针;或
一个操作数是一个指针,另一个是一个空指针常量。
这是 N1570 的语言缺陷吗?
【问题讨论】:
-
如果两个指针都是(或已转换为)
void *(无论是合格的还是不合格的),则两个操作数都是兼容的类型。 -
嗯?您准确地引用了约束的第三种情况。所以约束满足了,一切都很好。这些限制在任何以后的转换之前适用。
标签: c language-lawyer c11