在 D 中使用和实现具有简单类型的二元“is”运算符。(DLang)

Use and implementation of the binary `is` operator with simple types in D. (DLang)

在D中,case

中的二元is运算符有区别吗
void * p;
if ( p is null ) { }       // #1

使用指针,而不是简单地

if  ( ! p ) { }            // #2a

if ( p == null ) { }       // #2b

没有 is 运算符? (DLang)

(我将其限制为简单的标量类型,没有聚合或复杂类型。我知道 类 is 只是比较它们的地址,iirc。)

使用 void* 类型,与其他普通指针一样,没有区别。与int也没有区别,但与其他类型有区别,包括float、数组(包括字符串)、结构和类.

我建议你总是用任何类型写你的意思,所以如果你以后改变类型就可以了。使用 is 查看两个引用是否相同。使用 == 查看内容是否相同。避免使用 !p,除非可能 p 是一个普通的 bool 类型,因为它具有最令人惊讶的行为(它确实 cast(bool) 可以调用重载的 opCast!bool 在结构和 类 上,并在数组上执行 .ptr !is null,这开启了 null 与零长度数组的乐趣)。最好只说出你的意思,并保持代码的明确可读性和对重构的弹性。