在D中,案例
中的二进制is
运算符之间是否存在任何差异
void * p;
if ( p is null ) { } // #1
使用指针,而不是
if ( ! p ) { } // #2a
或
if ( p == null ) { } // #2b
没有is运算符? (DLang)
(我将此限制为简单的标量类型,没有聚合或复杂类型。我知道使用类is
只需比较它们的地址,即iirc。)
答案 0 :(得分:4)
类型void*
与其他普通指针一样,没有区别。与int
也没有区别,但与其他类型存在差异,包括float
,数组(包括字符串),结构和类。
我建议你总是用任何类型写出你的意思,所以如果你以后更改类型就可以了。使用is
查看两个引用是否相同。使用==
查看内容是否相同。避免使用!p
,除非p
可能是普通bool
类型,因为它具有最令人惊讶的行为(cast(bool)
可以调用重载opCast!bool
在结构和类上,对数组执行.ptr !is null
,这会打开null与零长度数组的快乐。最好只是说出你的意思,并保持代码明确可读和对重构具有弹性。