在D中使用和实现二进制`is`运算符和简单类型(DLang)

时间:2016-08-31 21:07:09

标签: pointers d comparison-operators

在D中,案例

中的二进制is运算符之间是否存在任何差异
void * p;
if ( p is null ) { }       // #1

使用指针,而不是

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

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

没有is运算符? (DLang)

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

1 个答案:

答案 0 :(得分:4)

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

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