在 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 与零长度数组的乐趣)。最好只说出你的意思,并保持代码的明确可读性和对重构的弹性。
在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 与零长度数组的乐趣)。最好只说出你的意思,并保持代码的明确可读性和对重构的弹性。